作業資訊
這個作業屬於哪個課程 | 2024-2025-1-計算機基礎與程式設計 |
---|---|
這個作業要求在哪裡 | https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06 |
這個作業的目標 | Polya如何解決問題 簡單型別與組合型別 複合資料結構 查詢與排序演算法 演算法複雜度 遞迴 程式碼安全 |
作業正文 | https://www.cnblogs.com/wchxx/p/18523221 |
教材學習內容總結
根據您提供的關鍵詞,以下是對每個主題的總結:
Polya如何解決問題
Polya提出了一個著名的問題解決框架,通常被稱為“Polya的四步”:
- 理解問題:徹底理解問題是什麼,需要解決什麼。
- 制定計劃:設計一個解決問題的方案,可能包括分解問題、尋找模式或使用已知的演算法。
- 執行計劃:實施計劃,可能涉及計算、程式設計或其他形式的實驗。
- 回顧:檢查解決方案,確保它是正確的,並從中學習以改進未來的解決方案。
簡單型別與組合型別
- 簡單型別(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):一種分治演算法,透過選擇一個基準值將陣列分為兩部分。
演算法複雜度
演算法複雜度分析涉及評估演算法執行時間和空間需求的增長速率。常見的複雜度表示包括O(n)、O(n^2)、O(log n)等,它們描述了演算法效能隨輸入規模增加的變化趨勢。
遞迴
遞迴是一種在問題解決中自我引用的方法,它將問題分解為更小的子問題來解決。遞迴的關鍵要素包括:
- 基本情況:遞迴的終止條件。
- 遞迴步驟:將問題分解為更小的子問題,並遞迴解決這些子問題。
程式碼安全
保護程式碼安全的方法包括:
- 訪問控制:限制對程式碼的訪問。
- 加密:使用加密技術保護程式碼不被未授權訪問。
- 安全協議:使用SSH、TLS等安全協議傳輸原始碼。
- 程式碼混淆:將原始碼轉換為難以理解的形式,防止逆向工程。
- 安全審計:定期進行安全審計,檢測和防止安全漏洞。
- 員工培訓:提高員工對原始碼安全性的意識。
當然,讓我們更詳細地探討C語言程式設計第五章中關於控制結構和函式的兩個主要部分。
控制結構
控制結構是程式設計中用於控制程式執行流程的語句。在C語言中,控制結構包括條件語句和迴圈語句。
條件語句
if
語句:用於在滿足特定條件時執行程式碼塊。if (condition) { // 條件為真時執行的程式碼 }
else
語句:與if
配合使用,當if
條件不滿足時執行。if (condition) { // 條件為真時執行的程式碼 } else { // 條件為假時執行的程式碼 }
else if
語句:允許你檢查多個條件。if (condition1) { // 條件1為真時執行的程式碼 } else if (condition2) { // 條件2為真時執行的程式碼 } else { // 所有條件都不為真時執行的程式碼 }
switch
語句:用於根據一個變數的值執行不同的程式碼塊。switch (variable) { case value1: // 當variable等於value1時執行的程式碼 break; case value2: // 當variable等於value2時執行的程式碼 break; default: // 沒有匹配的case時執行的程式碼 }
迴圈語句
for
迴圈:用於在滿足條件時重複執行程式碼塊。for (initialization; condition; increment) { // 迴圈體 }
while
迴圈:在條件為真時重複執行程式碼塊。while (condition) { // 迴圈體 }
do-while
迴圈:至少執行一次程式碼塊,然後檢查條件是否為真以決定是否繼續迴圈。do { // 迴圈體 } while (condition);
break
和continue
語句:break
用於立即退出迴圈,而continue
用於跳過當前迭代的剩餘部分,直接開始下一次迭代。
函式
函式是C語言中的基本構建塊,允許你將程式碼封裝成可重用的單元。
函式定義
- 函式定義包括返回型別、函式名、引數列表和函式體。
returnType functionName(parameterType parameterName, ...) { // 函式體 return value; // 如果返回型別不是void }
函式呼叫
- 函式呼叫涉及指定函式名和傳遞所需的引數。
result = functionName(arg1, arg2, ...);
引數傳遞
- 值傳遞:函式接收引數值的副本,對引數的修改不會影響原始變數。
- 地址傳遞:函式接收引數的記憶體地址,允許函式直接修改原始變數。
遞迴函式
- 遞迴函式是在其定義中呼叫自身的函式。
int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }
教材學習中的問題和解決過程
問題:編寫的C語言程式在Windows和openeuler中的執行結果有差異
結果:詢問AI,得到以下回答:
在C語言程式中,Windows和OpenEuler(Linux發行版)之間的執行結果差異可能是由於以下幾個原因造成的:
-
編譯器差異:Windows常用MSVC,而Linux常用GCC,它們對C語言標準的支援和實現可能不同。
-
系統呼叫和庫函式:Windows和Linux的系統呼叫和庫函式實現不同,影響程式的I/O和檔案操作。
-
檔案路徑分隔符:Windows使用反斜槓(\),而Linux使用正斜槓(/)。
-
動態連結庫:Windows使用DLL,Linux使用SO檔案,影響共享庫的載入。
為了減少差異,可以採用條件編譯和使用標準庫函式,避免平臺特定的程式碼。
換用其它程式碼後問題解決。
基於AI的學習
計劃學習時間:
2小時
實際學習時間:
2小時
改進情況: