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

灯火忽已晚發表於2024-11-01

作業資訊

這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 2024-2025-1計算機基礎與程式設計第六週作業
這個作業的目標
作業正文 2024-2025-1學號20241309《計算機基礎與程式設計》第六週學習總結

教材學習內容總結

《電腦科學概論》第七章:

1. Polya 解決問題的方法:

  • 理解問題:這是解決問題的第一步,必須徹底弄清楚問題的要求、已知條件和未知條件等,避免對問題的理解出現偏差或遺漏。只有清晰地理解了問題,才能為後續的解決步驟打下堅實的基礎。
  • 找到資料和未知量之間的聯絡(擬定計劃/方案):分析問題中資料與未知數的關係,思考如何利用已知資訊來推導或計算出未知量。這一步需要充分發揮創造力和邏輯思維能力,嘗試找出解決問題的多種途徑和方法,並選擇最合適的方案。
  • 執行方案:按照選定的方案逐步實施,將理論上的解決方案轉化為實際的操作步驟。在執行過程中要保持嚴謹和細緻,確保每一個操作都正確無誤。
  • 分析得到的解決方案:對執行方案後得到的結果進行檢驗和評估,看是否真正解決了問題。如果結果不理想,需要反思問題出在哪裡,是方案本身存在缺陷,還是執行過程中出現了錯誤,以便對解決方案進行改進和完善。

2. 簡單型別與組合型別:

  • 簡單型別:是基本的資料型別,如整數型別(用於表示整數)、浮點型別(用於表示小數)、字元型別(用於表示單個字元)、布林型別(用於表示真或假兩種邏輯值)等。這些型別是構建更復雜資料結構的基礎。
  • 組合型別:是由多個簡單型別或其他組合型別組合而成的資料型別,能夠表示多個資料的集合或具有多個屬性的資料。常見的組合型別有:
  • 序列型別:元素按順序排列的集合,例如陣列、列表、字串等。陣列是相同型別元素的有序集合,可以透過索引訪問其中的元素;列表是可變長度的元素序列,可以包含不同型別的元素;字串是字元的序列,在計算機應用中具有不可替代的作用。
  • 集合型別:元素的無序集合,其中的元素具有唯一性,即集合中不會出現重複的元素。集合常用於表示一些需要去重或判斷元素是否存在的情況。
  • 對映型別:由鍵值對組成的資料結構,透過鍵來快速查詢對應的值。例如字典(在一些程式語言中也稱為雜湊表或關聯陣列),可以根據鍵快速獲取與之關聯的值。

3. 複合資料結構:是在簡單型別和組合型別的基礎上構建的更復雜的資料結構,它將多種資料型別組合在一起,以滿足特定的應用需求。例如:

  • 結構體(記錄):在一些程式語言中,結構體是一種將不同型別的變數組合在一起的複合資料型別。結構體中的每個成員都有自己的名稱和資料型別,可以透過成員的名稱來訪問和操作結構體中的資料。這種資料結構常用於表示具有多個屬性的實體,如學生資訊(包含姓名、年齡、學號等屬性)。
  • 連結串列:連結串列是一種動態的資料結構,由一系列節點組成,每個節點包含資料和指向下一個節點的指標。連結串列的優點是可以靈活地新增和刪除節點,適用於資料量不確定或需要頻繁修改的資料集合。
  • 樹:樹是一種分層的資料結構,由節點和邊組成。樹中的每個節點都可以有多個子節點,但只有一個父節點(除了根節點,根節點沒有父節點)。樹結構常用於表示具有層次關係的資料,如檔案系統、組織結構等。
  • 圖:圖是一種更為複雜的非線性資料結構,由頂點和邊組成。圖中的頂點可以與任意其他頂點相連,邊可以具有權重或方向等屬性。圖結構常用於表示複雜的關係網路,如社交網路、交通網路等。

4. 查詢與排序演算法:

  • 查詢演算法:
  • 順序查詢:也稱為線性查詢,是最基本的查詢演算法。它從資料集合的一端開始,逐個檢查每個元素是否為要查詢的物件,直到找到為止。順序查詢的優點是簡單易懂,適用於資料量較小或資料未排序的情況,但查詢效率較低。
  • 二分檢索(二分查詢):適用於已排序的資料集合。它透過不斷將資料集合分成兩半,比較中間元素與要查詢的元素的大小,確定要查詢的元素在左半部分還是右半部分,然後在相應的部分繼續進行查詢。二分查詢的效率較高,時間複雜度為 O(log n)。
  • 排序演算法:
  • 選擇排序:每次從待排序的資料集合中選擇最小(或最大)的元素,將其與當前位置的元素交換,直到整個資料集合排序完成。選擇排序的演算法簡單,但效率較低,時間複雜度為 O(n²)。
  • 氣泡排序:透過不斷比較相鄰的兩個元素,將較大(或較小)的元素交換到後面(或前面),經過多次迴圈,使資料集合逐漸有序。氣泡排序的優點是易於理解和實現,但效率也不高,時間複雜度為 O(n²)。
  • 插入排序:將待排序的元素逐個插入到已排序的部分中,保持已排序部分的有序性。插入排序對於接近有序的資料集合效率較高,時間複雜度在最好情況下為 O(n),在最壞情況下為 O(n²)。
  • 快速排序:一種基於交換的高效排序演算法。它首先選擇一個基準元素,將資料集合分成兩部分,一部分的元素小於基準元素,另一部分的元素大於基準元素,然後對這兩部分分別進行遞迴排序。快速排序的平均時間複雜度為 O(n log n),但在最壞情況下可能退化為 O(n²)。

5. 演算法複雜度:

演算法複雜度是衡量演算法效率的重要指標,它反映了演算法在執行時所需的資源(主要包括時間資源和記憶體資源)。

  • 時間複雜度:表示演算法執行所需的時間與問題規模之間的關係。常用的時間複雜度有 O(1)(常數時間,表示演算法的執行時間不隨問題規模的增加而變化)、O(n)(線性時間,表示演算法的執行時間與問題規模成正比)、O(n²)(平方時間,表示演算法的執行時間與問題規模的平方成正比)等。在分析演算法的時間複雜度時,通常關注演算法中最耗時的操作或迴圈的執行次數。
  • 空間複雜度:表示演算法執行所需的儲存空間與問題規模之間的關係。空間複雜度的分析主要考慮演算法中所使用的變數、陣列、結構體等資料結構所佔用的儲存空間,以及遞迴呼叫時所需的棧空間等。

6. 遞迴:

遞迴是一種演算法呼叫它本身的程式設計技巧。遞迴演算法通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解。遞迴一般需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。遞迴的優點是可以用簡潔的程式碼實現複雜的功能,並且程式碼的邏輯清晰易懂,但遞迴呼叫會佔用較多的系統資源,可能導致棧溢位等問題。

7. 程式碼安全:

在問題求解和演算法設計過程中,程式碼安全是一個非常重要的考慮因素。程式碼安全涉及到防止程式碼被惡意攻擊、保護使用者資料的隱私和完整性等方面。例如,在編寫程式碼時要注意對輸入資料的合法性進行驗證,防止使用者輸入惡意資料導致程式崩潰或執行非法操作;對敏感資料進行加密處理,防止資料洩露;對程式的訪問許可權進行嚴格控制,防止未經授權的訪問等。

《C語言程式設計》第五章:

選擇結構概述

選擇結構用於根據條件判斷來決定程式的執行路徑,使得程式可以根據不同情況執行不同的程式碼塊,增強程式的靈活性和邏輯性。

if語句

1. 單分支if語句
格式為: if(表示式) 語句; 。當表示式的值為真(在C語言中,非零值表示真,零值表示假)時,執行後面的語句;若表示式的值為假,則跳過該語句。例如, if(x > 5) printf("x大於5\n"); ,這裡當 x 的值大於 5 時,就會輸出相應內容。
2. 雙分支if - else語句
格式為: if(表示式) 語句1; else 語句2; 。當表示式的值為真時,執行語句1;當表示式的值為假時,執行語句2。例如, if(a % 2 == 0) printf("偶數\n"); else printf("奇數\n"); 用於判斷 a 是偶數還是奇數。
3. 多分支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 配對,可以透過新增花括號來明確配對關係。

教材學習中的問題和解決過程

問題1:進行實驗二基本要求的程式碼編寫時發現可以執行但是計算出出的結果與正確結果不同;;
問題1解決方案:透過詢問助教。發現是誤將&打成了%

基於AI的學習

其他(感悟、思考等,可選)

設計並實現一個位運算計算器。該計算器能夠對整數執行下列基本的位運算:
(1)按位與(AND)
(2)按位或(OR)
(3)按位取反(NOT)
(4)按位異或(XOR)
(5)左移(LEFT SHIFT)
(6)右移(RIGHT SHIFT)

相關文章