學期(2024-2025-1) 學號(20241420) 《計算機基礎與程式設計》第六週學習總結

任与生發表於2024-11-02

學期(2024-2025-1) 學號(20241420) 《計算機基礎與程式設計》第六週學習總結

作業資訊

這個作業屬於哪個課程 <班級連結>(如[https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))
這個作業要求在哪裡 <作業要求連結>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06)
這個作業的目標 <電腦科學概論(第七版)第7章 《C語言程式設計》第5章>

教材學習內容總結

C語言的選擇控制結構主要透過ifswitch?:(三元運算子)來實現。下面簡要但全面地介紹這些控制結構:

  1. if語句

    • 基本形式:if語句用於在滿足特定條件時執行一段程式碼。
    • 語法:
      if (條件) {
          // 條件為真時執行的程式碼
      } else {
          // 條件為假時執行的程式碼
      }
      
    • 可以巢狀if語句,也可以使用else if來檢查多個條件。
  2. switch語句

    • switch語句用於根據變數的值執行不同的程式碼塊。
    • 語法:
      switch (變數) {
          case 值1:
              // 當變數等於值1時執行的程式碼
              break;
          case 值2:
              // 當變數等於值2時執行的程式碼
              break;
          // ...
          default:
              // 如果變數的值不匹配任何case時執行的程式碼
      }
      
    • break語句用於退出switch結構,防止執行下一個case
  3. 三元運算子(?:

    • 三元運算子是一種簡潔的選擇結構,用於在兩個值之間選擇。
    • 語法:
      條件 ? 表示式1 : 表示式2;
      
    • 如果條件為真,則返回表示式1的值,否則返回表示式2的值。

這些選擇控制結構是C語言中實現條件邏輯的基礎,允許程式根據不同的條件執行不同的程式碼路徑。

陣列:

  1. 定義
    陣列是一個容器物件,它儲存了具有相同型別的一系列元素,並且可以透過索引來訪問這些元素。

  2. 元素型別
    陣列中的所有元素必須是相同的資料型別,例如整型、浮點型、字元型等。

  3. 索引
    陣列中的每個元素都可以透過一個唯一的索引來訪問,索引通常是從0開始的整數。

  4. 大小
    陣列的大小是在宣告時確定的,這意味著一旦建立了陣列,其包含的元素數量就固定了。在某些程式語言中,如C和C++,陣列的大小是靜態的,而在其他語言如Python中,陣列(更準確地說是列表)的大小是動態的。

  5. 宣告
    在不同的程式語言中,陣列的宣告方式不同。例如,在C語言中,可以這樣宣告一個整型陣列:

    int myArray[5]; // 宣告一個包含5個整數的陣列
    
  6. 訪問和修改
    可以透過索引來訪問和修改陣列中的元素。例如,在C語言中:

    myArray[0] = 10;  // 將陣列的第一個元素設定為10
    int value = myArray[0];  // 讀取陣列的第一個元素
    
    

排序演算法:

1. 選擇排序(Selection Sort)

原理

  • 選擇排序的基本思想是:遍歷陣列,每次從未排序的部分找出最小(或最大)的元素,存放到排序序列的起始位置,直到整個序列有序。
  • 它重複地走訪過列表,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

步驟

  1. 找到未排序部分的最小元素。
  2. 將其與未排序部分的第一個元素交換位置。

時間複雜度:O(n^2),其中n是陣列的長度。

2. 泡沫排序(Bubble Sort)

原理

  • 泡沫排序的基本思想是:透過重複遍歷待排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
  • 遍歷數列的工作是重複進行直到沒有再需要交換,也就是說該數列已經排序完成。

步驟

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。

時間複雜度:O(n^2),其中n是陣列的長度。

3. 快速排序(Quick Sort)

原理

  • 快速排序的基本思想是:透過一個分治法(Divide and Conquer)的過程,將一個序列分為兩個子序列,使得其中一個子序列的所有資料都比另一個子序列的所有資料要小,然後再按此方法對兩個子序列分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

步驟

  1. 選擇一個元素作為"基準"(pivot)。
  2. 重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。
  3. 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

時間複雜度:平均O(n log n),最壞O(n^2)。

4. 插入排序(Insertion Sort)

原理

  • 插入排序的基本思想是:透過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
  • 插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序)。

步驟

  1. 從第一個元素開始,該元素可以認為已經被排序。
  2. 取出下一個元素,在已經排序的元素序列中從後向前掃描。
  3. 如果該元素(已排序)大於新元素,將該元素移到下一位置。
  4. 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置。
  5. 將新元素插入到該位置後。
  6. 重複步驟2~5。

時間複雜度:O(n^2),其中n是陣列的長度。

這些排序演算法各有優缺點,選擇排序和泡沫排序在資料量較大時效率較低,而快速排序在平均情況下效率較高,插入排序在資料量較小或部分有序的情況下效率較高。

AI學習











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

1.問題:除錯位運算程式時用人力計算正確成本很高,檢驗效率慢
解決方法:在程式碼中加入一行輸出答案,就可以直接知曉答案再輸入檢驗程式了
2.問題:偽隨機數的解決
解決方法:加入srand()函式
3.問題:scanf輸入時會先空一行結果,再對下一行執行命令
解決問題:scanf使用時多加了換行命令“\n”,刪去即可

  • 計劃學習時間:10小時

  • 實際學習時間:9小時

相關文章