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

20241319吴辰曦發表於2024-11-03

作業資訊

這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06
這個作業的目標 Polya如何解決問題 簡單型別與組合型別 複合資料結構 查詢與排序演算法 演算法複雜度 遞迴 程式碼安全
作業正文 https://www.cnblogs.com/wchxx/p/18523221

教材學習內容總結

根據您提供的關鍵詞,以下是對每個主題的總結:

Polya如何解決問題

Polya提出了一個著名的問題解決框架,通常被稱為“Polya的四步”:

  1. 理解問題:徹底理解問題是什麼,需要解決什麼。
  2. 制定計劃:設計一個解決問題的方案,可能包括分解問題、尋找模式或使用已知的演算法。
  3. 執行計劃:實施計劃,可能涉及計算、程式設計或其他形式的實驗。
  4. 回顧:檢查解決方案,確保它是正確的,並從中學習以改進未來的解決方案。

簡單型別與組合型別

  • 簡單型別(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)等,它們描述了演算法效能隨輸入規模增加的變化趨勢。

遞迴

遞迴是一種在問題解決中自我引用的方法,它將問題分解為更小的子問題來解決。遞迴的關鍵要素包括:

  1. 基本情況:遞迴的終止條件。
  2. 遞迴步驟:將問題分解為更小的子問題,並遞迴解決這些子問題。

程式碼安全

保護程式碼安全的方法包括:

  1. 訪問控制:限制對程式碼的訪問。
  2. 加密:使用加密技術保護程式碼不被未授權訪問。
  3. 安全協議:使用SSH、TLS等安全協議傳輸原始碼。
  4. 程式碼混淆:將原始碼轉換為難以理解的形式,防止逆向工程。
  5. 安全審計:定期進行安全審計,檢測和防止安全漏洞。
  6. 員工培訓:提高員工對原始碼安全性的意識。
    當然,讓我們更詳細地探討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);
    
  • breakcontinue語句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發行版)之間的執行結果差異可能是由於以下幾個原因造成的:

  1. 編譯器差異:Windows常用MSVC,而Linux常用GCC,它們對C語言標準的支援和實現可能不同。

  2. 系統呼叫和庫函式:Windows和Linux的系統呼叫和庫函式實現不同,影響程式的I/O和檔案操作。

  3. 檔案路徑分隔符:Windows使用反斜槓(\),而Linux使用正斜槓(/)。

  4. 動態連結庫:Windows使用DLL,Linux使用SO檔案,影響共享庫的載入。

為了減少差異,可以採用條件編譯和使用標準庫函式,避免平臺特定的程式碼。
換用其它程式碼後問題解決。

基於AI的學習




計劃學習時間:
2小時
實際學習時間:
2小時
改進情況:

相關文章