這個作業屬於https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP
這個作業要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01
作業正文https:https://www.cnblogs.com/gly03/p/18523229
教材學習內容總結
一、簡單型別與組合型別
(一)簡單型別
簡單型別(Primitive Types)是程式語言中最基本的資料型別,通常包括整數、浮點數、字元、布林值等,它們是不可再分的基本資料單元。
(二)組合型別
組合型別(Composite Types)是由簡單型別組合而成的資料型別,例如陣列、結構體、類等。它們可以包含多個簡單型別的資料,並且可以進行復雜的操作。
二、複合資料結構
(一)陣列
陣列(Array)是一組相同型別的元素的集合。
(二)連結串列
連結串列(Linked List)是由節點組成的線性資料結構,每個節點包含資料和指向下一個節點的指標。
(三)棧
棧(Stack)是後進先出(LIFO)的資料結構。
(四)佇列
佇列(Queue)是先進先出(FIFO)的資料結構。
(五)樹
樹(Tree)是由節點和邊組成的層次結構,如二叉樹、B樹等。
(六)圖
圖(Graph)是由節點和邊組成的非線性資料結構,用於表示複雜的關係。
三、查詢與排序演算法
(一)查詢演算法
- 線性查詢
線性查詢(Linear Search)是逐個檢查每個元素,直到找到目標元素。 - 二分查詢
二分查詢(Binary Search)是在有序陣列中透過不斷縮小查詢範圍來查詢目標元素。
(二)排序演算法 - 氣泡排序
氣泡排序(Bubble Sort)是透過多次遍歷陣列,比較相鄰元素並交換位置。 - 選擇排序
選擇排序(Selection Sort)是每次選擇最小(或最大)的元素放到已排序部分的末尾。 - 插入排序
插入排序(Insertion Sort)是將未排序部分的元素逐個插入到已排序部分的正確位置。 - 快速排序
快速排序(Quick Sort)是透過選擇一個基準元素,將陣列分為兩部分並遞迴排序。 - 歸併排序
歸併排序(Merge Sort)是將陣列分為兩部分,分別排序後再合併。
四、演算法複雜度
(一)時間複雜度
時間複雜度(Time Complexity)表示演算法執行時間隨輸入規模增長的變化趨勢,常用大O表示法(O(n)、O(n^2)等)。
(二)空間複雜度
空間複雜度(Space Complexity)表示演算法執行過程中所需的額外空間隨輸入規模增長的變化趨勢。
五、遞迴
遞迴是一種程式設計技術,函式直接或間接呼叫自身來解決問題。遞迴通常用於解決可以分解為相同問題的子問題的情況。遞迴的關鍵在於定義遞迴基(終止條件)和遞迴關係(如何將問題分解為子問題)。
六、程式碼安全
(一)輸入驗證
輸入驗證(Input Validation)確保使用者輸入的資料符合預期格式和範圍。
(二)邊界檢查
邊界檢查(Boundary Checking)防止陣列越界、緩衝區溢位等錯誤。
(三)加密
加密(Encryption)對敏感資料進行加密,防止資料洩露。
(四)許可權控制
許可權控制(Access Control)限制不同使用者對系統資源的訪問許可權。
(五)日誌記錄
日誌記錄(Logging)記錄系統操作和錯誤資訊,便於追蹤和分析問題。
(六)安全編碼實踐
安全編碼實踐(Secure Coding Practices)遵循安全編碼規範,避免常見的安全漏洞。
if語句 - 單分支if語句
格式為: if(表示式) 語句; 。當表示式的值為真(在C語言中,非零值表示真,零值表示假)時,執行後面的語句;若表示式的值為假,則跳過該語句。例如, if(x > 5) printf("x大於5\n"); ,這裡當 x 的值大於 5 時,就會輸出相應內容。 - 雙分支if - else語句
格式為: if(表示式) 語句1; else 語句2; 。當表示式的值為真時,執行語句1;當表示式的值為假時,執行語句2。例如, if(a % 2 == 0) printf("偶數\n"); else printf("奇數\n"); 用於判斷 a 是偶數還是奇數。 - 多分支if - else if - … - else語句
用於處理多種可能的情況。格式為: if(表示式1) 語句1; else if(表示式2) 語句2; … else 語句n; 。程式會依次判斷表示式的值,當某個表示式的值為真時,執行對應的語句,然後跳過後面的判斷。若所有表示式的值都為假,則執行 else 後的語句(如果有 else 部分)。比如根據學生成績劃分等級: if(score >= 90) printf("A"); else if(score >= 80) printf("B"); else if(score >= 70) printf("C"); else if(score >= 60) printf("D"); else printf("E");
switch語句
• 基本形式: switch(表示式) { case 常量表示式1: 語句組1; break; case 常量表示式2: 語句組2; break; … default: 語句組n; } 。首先計算 switch 後面表示式的值,然後與各個 case 後面的常量表示式的值進行比較。若與某個 case 的值相等,則執行該 case 後面的語句組,直到遇到 break 語句或者 switch 語句結束。如果沒有匹配的 case ,則執行 default 後面的語句組( default 部分可選)。例如, switch(day) { case 1: printf("星期一"); break; case 2: printf("星期二"); break; … default: printf("輸入錯誤"); } 可根據 day 的值輸出相應的星期。
• 注意事項: case 後的常量表示式的值必須互不相同,且只能是整型或字元型常量。 break 語句在 switch 語句中非常關鍵,若遺漏可能導致程式執行流程不符合預期,出現“穿透”現象。
條件運算子
• C語言提供了條件運算子( ?: ),這是一個三目運算子。其一般形式為: 表示式1? 表示式2 : 表示式3 。先計算表示式1的值,如果為真,則整個表示式的值為表示式2的值;如果為假,則整個表示式的值為表示式3的值。例如, max = (a > b)? a : b; 用於求 a 和 b 中的較大值,它可以看作是 if - else 語句的一種簡潔表示形式。
選擇結構的巢狀
在 if 語句或 switch 語句內部可以再包含其他的 if 語句或 switch 語句,形成巢狀結構。但要注意巢狀的層次不要過於複雜,以保證程式的可讀性和可維護性。在巢狀使用時,要特別注意 else 與 if 的配對規則, else 總是與它上面最近的且未配對的 if 配對,可以透過新增花括號來明確配對關係。