學期(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語言的選擇控制結構主要透過if
、switch
和?:
(三元運算子)來實現。下面簡要但全面地介紹這些控制結構:
-
if
語句:- 基本形式:
if
語句用於在滿足特定條件時執行一段程式碼。 - 語法:
if (條件) { // 條件為真時執行的程式碼 } else { // 條件為假時執行的程式碼 }
- 可以巢狀
if
語句,也可以使用else if
來檢查多個條件。
- 基本形式:
-
switch
語句:switch
語句用於根據變數的值執行不同的程式碼塊。- 語法:
switch (變數) { case 值1: // 當變數等於值1時執行的程式碼 break; case 值2: // 當變數等於值2時執行的程式碼 break; // ... default: // 如果變數的值不匹配任何case時執行的程式碼 }
break
語句用於退出switch
結構,防止執行下一個case
。
-
三元運算子(
?:
):- 三元運算子是一種簡潔的選擇結構,用於在兩個值之間選擇。
- 語法:
條件 ? 表示式1 : 表示式2;
- 如果條件為真,則返回
表示式1
的值,否則返回表示式2
的值。
這些選擇控制結構是C語言中實現條件邏輯的基礎,允許程式根據不同的條件執行不同的程式碼路徑。
陣列:
-
定義:
陣列是一個容器物件,它儲存了具有相同型別的一系列元素,並且可以透過索引來訪問這些元素。 -
元素型別:
陣列中的所有元素必須是相同的資料型別,例如整型、浮點型、字元型等。 -
索引:
陣列中的每個元素都可以透過一個唯一的索引來訪問,索引通常是從0開始的整數。 -
大小:
陣列的大小是在宣告時確定的,這意味著一旦建立了陣列,其包含的元素數量就固定了。在某些程式語言中,如C和C++,陣列的大小是靜態的,而在其他語言如Python中,陣列(更準確地說是列表)的大小是動態的。 -
宣告:
在不同的程式語言中,陣列的宣告方式不同。例如,在C語言中,可以這樣宣告一個整型陣列:int myArray[5]; // 宣告一個包含5個整數的陣列
-
訪問和修改:
可以透過索引來訪問和修改陣列中的元素。例如,在C語言中:myArray[0] = 10; // 將陣列的第一個元素設定為10 int value = myArray[0]; // 讀取陣列的第一個元素
排序演算法:
1. 選擇排序(Selection Sort)
原理:
- 選擇排序的基本思想是:遍歷陣列,每次從未排序的部分找出最小(或最大)的元素,存放到排序序列的起始位置,直到整個序列有序。
- 它重複地走訪過列表,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
步驟:
- 找到未排序部分的最小元素。
- 將其與未排序部分的第一個元素交換位置。
時間複雜度:O(n^2),其中n是陣列的長度。
2. 泡沫排序(Bubble Sort)
原理:
- 泡沫排序的基本思想是:透過重複遍歷待排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。
- 遍歷數列的工作是重複進行直到沒有再需要交換,也就是說該數列已經排序完成。
步驟:
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
時間複雜度:O(n^2),其中n是陣列的長度。
3. 快速排序(Quick Sort)
原理:
- 快速排序的基本思想是:透過一個分治法(Divide and Conquer)的過程,將一個序列分為兩個子序列,使得其中一個子序列的所有資料都比另一個子序列的所有資料要小,然後再按此方法對兩個子序列分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
步驟:
- 選擇一個元素作為"基準"(pivot)。
- 重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。
- 遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
時間複雜度:平均O(n log n),最壞O(n^2)。
4. 插入排序(Insertion Sort)
原理:
- 插入排序的基本思想是:透過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
- 插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序)。
步驟:
- 從第一個元素開始,該元素可以認為已經被排序。
- 取出下一個元素,在已經排序的元素序列中從後向前掃描。
- 如果該元素(已排序)大於新元素,將該元素移到下一位置。
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置。
- 將新元素插入到該位置後。
- 重複步驟2~5。
時間複雜度:O(n^2),其中n是陣列的長度。
這些排序演算法各有優缺點,選擇排序和泡沫排序在資料量較大時效率較低,而快速排序在平均情況下效率較高,插入排序在資料量較小或部分有序的情況下效率較高。
AI學習
程式碼除錯中的問題和解決過程
1.問題:除錯位運算程式時用人力計算正確成本很高,檢驗效率慢
解決方法:在程式碼中加入一行輸出答案,就可以直接知曉答案再輸入檢驗程式了
2.問題:偽隨機數的解決
解決方法:加入srand()函式
3.問題:scanf輸入時會先空一行結果,再對下一行執行命令
解決問題:scanf使用時多加了換行命令“\n”,刪去即可
-
計劃學習時間:10小時
-
實際學習時間:9小時