這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276
這個作業的目標 Polya如何解決問題 簡單型別與組合型別 複合資料結構 查詢與排序演算法 演算法複雜度 遞迴 程式碼安全
作業正文 https://www.cnblogs.com/rockytyh/p/18523609
教材學習內容總結
一、Polya如何解決問題
理解問題:仔細剖析問題的各個方面,包括明確已知條件、未知元素以及問題的目標。這就像在解一道數學應用題時,要清楚題目中給出的數字、關係,以及最終要求解的答案型別,為後續解題打下基礎。
制定計劃:依據對問題的理解,從已有的知識儲備和解題經驗中挖掘可能的解決方案。比如是數學問題就考慮相應公式、定理,若是程式設計問題就思考合適的演算法和資料結構,這是解題的關鍵構思階段。
執行計劃:按照既定計劃認真落實每一個步驟,無論是計算過程還是程式設計實現,都要保證準確性和邏輯性,確保計劃順利推進。
回顧:對得到的結果進行檢驗,看其是否符合問題的條件和邏輯。同時,思考是否存在其他更優的解法,進一步提升解題能力。
二、簡單型別與組合型別
簡單型別:程式語言中的基本資料型別,像整數型別(int)用於儲存整數數值,如表示人數、數量等;浮點數型別(float)用於儲存帶有小數部分的資料,如物體的重量、價格等;字元型別(char)則用於儲存單個字元,像姓名中的某個字、符號等。它們各自有其特定的儲存格式和範圍。
組合型別:是將簡單型別組合起來的資料形式。陣列是一種典型的組合型別,它可以儲存多個相同型別的元素,比如整數陣列可以儲存班級學生的成績列表。結構體則更靈活,它能把不同型別的資料整合在一起,例如可以建立一個結構體來儲存學生的姓名(字元陣列)、年齡(整數)和成績(浮點數),以完整地描述學生資訊。
三、複合資料結構
連結串列:由一系列節點組成,每個節點不僅包含資料,還有指向下一個節點的指標。這種結構使得插入和刪除操作相對便捷。例如在處理動態變化的資料集合,如實時更新的任務列表時,連結串列能很好地適應資料的增減。
樹:呈現出層次化的結構,二叉樹是其中常見的一種,每個節點最多有兩個子節點。它在資料搜尋和排序方面有獨特優勢,比如二叉搜尋樹可以利用其特性快速定位資料,常用於資料庫索引等場景。
圖:由頂點和邊構成,能表示各種複雜的關係網路,比如社交網路中人與人之間的朋友關係、城市之間的交通路線等,廣泛應用於網路分析、路徑規劃等領域。
四、查詢與排序演算法
(一)查詢演算法
線性查詢是逐個檢查每個元素,直到找到目標元素。
二分查詢是在有序陣列中透過不斷縮小查詢範圍來查詢目標元素。
(二)排序演算法
氣泡排序是透過多次遍歷陣列,比較相鄰元素並交換位置。
選擇排序是每次選擇最小(或最大)的元素放到已排序部分的末尾。
插入排序是將未排序部分的元素逐個插入到已排序部分的正確位置。
快速排序是透過選擇一個基準元素,將陣列分為兩部分並遞迴排序。
歸併排序是將陣列分為兩部分,分別排序後再合併。
五、演算法複雜度
時間複雜度表示演算法執行時間隨輸入規模增長的變化趨勢,常用大O表示法(O(n)、O(n^2)等)。
空間複雜度表示演算法執行過程中所需的額外空間隨輸入規模增長的變化趨勢。
六、遞迴
遞迴是一種程式設計技術,函式直接或間接呼叫自身來解決問題。遞迴通常用於解決可以分解為相同問題的子問題的情況。遞迴的關鍵在於定義遞迴基(終止條件)和遞迴關係(如何將問題分解為子問題)。
七、程式碼安全
輸入驗證確保使用者輸入的資料符合預期格式和範圍。
邊界檢查防止陣列越界、緩衝區溢位等錯誤。
加密對敏感資料進行加密,防止資料洩露。
許可權控制限制不同使用者對系統資源的訪問許可權。
日誌記錄記錄系統操作和錯誤資訊,便於追蹤和分析問題。
安全編碼實踐遵循安全編碼規範,避免常見的安全漏洞。
教材學習中的問題和解決過程
問題1:在使用 Polya 方法解決問題時,如果制定的計劃執行不下去怎麼辦?
問題1解決方案:可以回到制定計劃步驟重新思考,檢查計劃是否存在不合理之處,比如是否對問題的某些條件理解有誤或者選擇的方法不適用。也可以嘗
試從其他角度制定新的計劃,還可以參考類似問題的解決方法或者向他人請教。
問題2:簡單型別中的布林型別(bool)常用於什麼場景?
問題 2 解決方案:布林型別常用於表示條件判斷的結果,比如在程式中判斷某個條件是否滿足。例如,判斷使用者是否登入(登入為 true,未登入為 false)、判斷某個數是否大於另一個數(大於為 true,小於等於為 false)等場景。在邏輯控制語句(如 if - else 語句)中經常使用布林型別的值來決定程式的執行路徑。
問題3:在C語言中,什麼是氣泡排序(Bubble Sort),它的基本思想是什麼?另外,你能推斷出它的時間複雜度嗎?
問題3解決方案:氣泡排序是一種簡單的排序演算法,它透過重複地遍歷要排序的列表,比較相鄰的元素並交換它們的位置,直到整個列表排序完成。氣泡排序的時間複雜度可以透過分析其最壞情況下的比較次數來推斷。