2024-2025-1 20241407《計算機基礎與程式設計》第六週學習總結

王艺涵發表於2024-11-03
這個作業屬於哪個課程 [2024-2025-1計算機基礎與程式設計](https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)
這個作業要求在哪裡 2024-2025-1計算機基礎與程式設計第六週作業
這個作業的目標 學習Polya如何解決問題,簡單型別與組合型別,複合資料結構,查詢與排序演算法,演算法複雜度,遞迴,程式碼安全
作業正文 https://www.cnblogs.com/wangyihan604505/p/18523157

教材學習內容總結

《電腦科學概論》第七版第七章主要圍繞問題求解與演算法設計展開,以下是該章節的學習內容總結:

  1. 問題求解過程:介紹了George Pólya的問題求解方法,並將其應用於計算機問題求解。強調了分析問題、列出主要任務、編寫演算法以及重組和改寫的重要性。
  2. 資料結構與型別:區分了簡單型別(如整數、浮點數)和複合型別(如陣列、結構體)。介紹了複合資料結構機制,如陣列、連結串列、棧和佇列等。
  3. 遞迴演算法:解釋了遞迴演算法的概念,即一個演算法直接或間接地呼叫自身,並提供了遞迴演算法的例子,如計算階乘、斐波那契數列等。
  4. 排序演算法:介紹了常見的排序演算法,包括選擇排序、插入排序、氣泡排序和快速排序,並分析了每種排序演算法的時間複雜度和空間複雜度。
  5. 檢索演算法:介紹了線性檢索和二分檢索兩種基本的檢索演算法,並強調了二分檢索在有序陣列中的高效性。
  6. 演算法設計原則:強調了資訊隱蔽、抽象和模組化在演算法設計中的重要性,並介紹了良好的命名規範和註釋習慣對於提高演算法可讀性和可維護性的幫助。
  7. 測試與除錯:介紹了白盒測試和黑盒測試兩種測試方法,並強調了測試在演算法設計和實現過程中的重要性,以及除錯技巧和方法。
    透過這些內容,我們更好地理解了如何有效地解決問題,設計和實現演算法,並確保演算法的正確性和效率。
    《C語言程式設計》第五版第五章的學習內容總結如下:
  8. 演算法的概念及其描述方法
    • 演算法:演算法是解決特定問題的明確、有限的步驟序列。它具有輸入、輸出、明確性、有限性、可行性等特點。
    • 描述方法:演算法可以透過多種方式描述,包括自然語言、流程圖、虛擬碼和程式語言。每種方法都有其優勢,自然語言易於理解,流程圖直觀,虛擬碼介於自然語言和程式語言之間,而程式語言則可以直接實現。
  9. 關係運算子與關係表示式
    • 關係運算子:用於比較兩個值之間的關係,常見的關係運算子包括==(等於)、!=(不等於)、>(大於)、<(小於)、>=(大於等於)、<=(小於等於)。
    • 關係表示式:由關係運算子連線的表示式,用於產生布林值(真或假)。例如,a > b是一個關係表示式,如果a的值大於b的值,則表示式為真。
  10. 用於單分支控制的條件語句
    • 單分支控制通常指的是if語句,它允許程式根據條件是否為真來執行一段程式碼。如果條件為真,則執行if塊中的程式碼;如果條件為假,則跳過這部分程式碼。
  11. 用於多分支控制的條件語句
    • 多分支控制通常指的是if-else語句或if-else if-else語句鏈。這些結構允許程式根據多個條件執行不同的程式碼塊。if語句檢查第一個條件,如果為真,則執行相應的程式碼塊;如果為假,則檢查下一個else if條件,依此類推,直到找到為真的條件或到達else塊(如果沒有條件為真,則執行else塊中的程式碼)。
  12. 用於多路選擇的Switch語句
    • switch語句用於根據一個變數的值選擇多個選項中的一個來執行。switch語句包含一個表示式,該表示式的結果用於與case標籤進行比較。如果匹配,則執行該case塊中的程式碼,並透過break語句退出switch結構,以防止“穿透”到下一個case
  13. 邏輯運算子和邏輯表示式
    • 邏輯運算子:用於組合多個布林表示式,產生一個新的布林值。常見的邏輯運算子包括&&(邏輯與)、||(邏輯或)、!(邏輯非)。
    • 邏輯表示式:由邏輯運算子連線的表示式,用於控制程式流程。例如,a && b是一個邏輯表示式,只有當ab都為真時,整個表示式才為真。
  14. 用於雙分支控制的條件語句
    • 雙分支控制通常指的是if-else語句,這是最基本的條件控制結構之一。它允許程式基於一個布林條件來選擇兩條執行路徑中的一條:
      • 如果條件為真(true),則執行if塊中的程式碼。
      • 如果條件為假(false),則執行else塊中的程式碼。
  15. 條件運算子(三元運算子)
    • 條件運算子,也稱為三元運算子,是一種簡潔的條件選擇語句,其語法形式為:條件 ? 表示式1 : 表示式2。如果條件為真,則整個表示式的值為表示式1的值;如果條件為假,則為表示式2的值。例如:
      int max = (a > b) ? a : b;
      
      這行程式碼的含義是:如果a大於b,則max的值為a,否則為b
  16. 條件表示式
    • 條件表示式是使用條件運算子構建的表示式,它允許在單行內進行條件選擇。條件表示式通常用於賦值、函式返回值等場景,以簡化程式碼並提高可讀性。條件表示式依賴於條件運算子來實現。
      這些控制結構和運算子是程式語言中處理條件邏輯的基礎工具,它們使得程式能夠根據不同的輸入或狀態做出決策,並執行相應的操作。透過合理使用這些工具,我們可以編寫出既靈活又高效的程式碼。

教材學習中的問題和解決過程

問題一:if-else語句和switch語句的區別什麼?分別在哪種情況下可用?
解決方法:AI答:if-else語句和switch語句都是用於條件控制的語句,但它們在用途和效率上有所不同。以下是它們的主要區別以及適用場景:

if-else語句

特點

  1. 條件多樣性if-else語句可以處理任何型別的條件判斷,包括複雜的邏輯表示式。
  2. 靈活性:可以巢狀使用,實現多分支控制。
  3. 適用性:適用於需要根據多個條件執行不同程式碼塊的場景。
    適用場景
  • 當需要根據多個不同的條件執行不同的程式碼塊時。
  • 當條件判斷較為複雜,涉及多個變數和邏輯運算子時。
  • 當需要根據條件的真假來執行不同的操作,並且這些條件不是基於單一變數的值時。

switch語句

特點

  1. 效率switch語句在某些情況下比多個if-else語句更高效,因為它透過跳轉表(在某些編譯器實現中)來實現,可以快速定位到對應的case標籤。
  2. 簡潔性switch語句在處理多個固定值的比較時,程式碼更加簡潔。
  3. 限制性switch語句只能用於比較一個變數或表示式的值與多個固定值。
    適用場景
  • 當需要根據單一變數的不同值執行不同的程式碼塊時。
  • 當變數的可能值是離散的、有限的,並且這些值是固定的(如列舉型別或特定的常量)。
  • 當程式碼的可讀性和維護性比執行效率更重要時。

區別總結

  • 條件複雜度if-else適用於條件判斷較為複雜的情況,而switch適用於條件判斷基於單一變數的固定值。
  • 執行效率:在某些情況下,switch語句可能比if-else語句更高效,尤其是在處理大量固定值的比較時。
  • 程式碼可讀性switch語句在處理固定值的比較時,程式碼更加簡潔和清晰。
  • 適用性if-else語句適用於需要根據多個條件執行不同程式碼塊的場景,而switch語句適用於基於單一變數值的多路選擇。
    在選擇使用if-else還是switch時,需要根據具體的應用場景和需求來決定。
    問題二:Switch語句中為什麼一定要加break?
    解決方法;AI答:在switch語句中使用break的原因是為了終止當前case塊的執行,並退出switch語句。如果不加break,會發生以下情況:
  1. “穿透”現象(Fall-through):如果沒有break,程式會繼續執行下一個case塊的程式碼,即使該case的條件不滿足。這種現象稱為“穿透”。這意味著,除非程式設計師明確地在每個case塊的末尾放置一個break,否則switch語句的行為可能不是預期的。
  2. 控制流的不確定性:如果沒有break,程式的控制流將變得不確定,因為程式會繼續執行所有後續case塊的程式碼,直到遇到一個breakswitch語句結束。這可能導致程式執行錯誤的程式碼塊,或者執行更多的程式碼,從而影響程式的正確性和效率。
  3. 程式碼可讀性和可維護性:在每個case塊後新增break可以提高程式碼的可讀性和可維護性。它明確地表明每個case塊是獨立的,並且只執行與當前條件匹配的程式碼塊。
  4. 避免邏輯錯誤:在沒有break的情況下,程式設計師可能會錯誤地認為只有匹配的case會被執行,而實際上所有後續的case也會被執行,這可能導致邏輯錯誤。
  5. 編譯器警告:一些編譯器會警告沒有breakcase,因為這是一個常見的程式設計錯誤,編譯器試圖提醒開發者可能的邏輯問題。
    例外情況:在某些情況下,程式設計師可能故意不使用break來利用“穿透”現象,這通常是在所有case塊執行相同程式碼的情況下。但是,即使在這種情況下,最好的做法是在最後一個case塊之後放置一個break,以避免將來新增新的case時意外地建立了另一個穿透。
    總的來說,breakswitch語句中是確保程式按照預期執行的關鍵,它防止了意外的程式碼執行和邏輯錯誤。

基於AI的學習

程式碼除錯中的問題和解決過程

問題:實驗二中的程式碼不夠簡練,重複語句過多。
解決方案:檢視教材,詢問AI,最終把重複語句刪掉,再加了一些別的語句,程式碼變得更加簡潔有力。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 200/400 1/3 18/38
第三週 300/700 1/4 20/58
第四周 400/1100 1/5 22/80
第五週 300/1400 1/6 22/102
第六週 400/1800 1/7 25/127

相關文章