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

欧阳嘉盛發表於2024-11-10

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

作業資訊

這個作業屬於哪個課程 <班級的連結>2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 2024-2025-1計算機基礎與程式設計第七週作業
這個作業的目標 陣列與連結串列 基於陣列和基於連結串列實現資料結構 無序表與有序表 樹 圖 子程式與引數
作業正文 正文

教材學習內容總結

電腦科學概論(第七版)第1章

《電腦科學概論(第七版)》第8章通常討論的是計算機網路和網際網路的基本概念。以下是該章的一些關鍵要點概括:

計算機網路的定義:介紹什麼是計算機網路,以及它們如何將不同的計算機和裝置連線在一起,以實現資料通訊和資源共享。

網路的型別:討論不同型別的網路,包括區域網(LAN)、廣域網(WAN)和都會網路(MAN),並解釋其特點和應用場景。

網路協議:講解網路通訊中使用的各種協議,如TCP/IP(傳輸控制協議/網際網路協議),以及怎樣透過這些協議來確保資料的可靠傳輸。

網路架構:介紹網路的層次結構,包括物理層、資料鏈路層、網路層、傳輸層和應用層等,幫助讀者理解各層在網路運作中的角色。

網際網路及其發展:概述網際網路的歷史、發展和現狀,包括應用程式(如HTTP、FTP等)及其在日常生活中的重要性。

網路安全:探討網路安全的基本概念和措施,包括防火牆、加密技術和網路攻擊型別等,以提高對網路安全的意識。

新興技術:介紹一些新興的網路技術和趨勢,如物聯網(IoT)、雲端計算和5G技術等,討論它們如何影響未來的計算機網路。

《C語言程式設計》第6章

指標的定義和使用:介紹指標的基本概念,包括指標的宣告、初始化和解引用。講解指標在程式中的作用以及如何透過指標來訪問和修改變數的值。

指標與陣列:解釋指標與陣列之間的關係,包括如何使用指標來運算元組元素,指標算術運算等。

函式指標:介紹函式指標的概念,解釋如何定義和使用函式指標,以實現回撥函式和簡化程式碼結構等。

動態記憶體分配:講解如何使用 malloc、calloc、realloc 和 free 函式進行動態記憶體分配和管理,強調如何有效地管理記憶體以避免記憶體洩漏。

結構體與指標的結合:介紹如何使用指標來處理結構體,包括結構體指標的定義、賦值和訪問結構體成員。

指標的陣列和指標的指標:討論指向指標的指標(雙重指標)及其在某些程式設計中的應用場景。

常見錯誤和除錯技巧:提醒讀者在使用指標時常見的錯誤(例如:空指標引用、野指標等),以及如何除錯和防止這些錯誤。

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

問:漢諾塔問題
答:漢諾塔問題是一個經典的遞迴問題,最早由法國數學家愛德華·盧卡斯在1883年提出。問題的敘述如下:

有三根柱子,A、B、C,初始時,所有的盤子按照從大到小的順序疊放在柱子A上。目標是將這些盤子全部移動到柱子C上,要求遵循以下規則:

一次只能移動一個盤子。
任何時候都不能將較大的盤子放在較小的盤子上。
可以使用柱子B作為輔助柱子。
問題解決思路:

將n-1個盤子從柱子A移動到柱子B,使用柱子C作為輔助柱子。
將第n個盤子(最大的盤子)直接從柱子A移動到柱子C。
將n-1個盤子從柱子B移動到柱子C,使用柱子A作為輔助柱子。

C語言實現漢諾塔問題

#include <stdio.h>

void hanoi(int n, char source, char target, char auxiliary) { if (n == 1) {
printf("Move disk 1 from %c to %c\n", source, target); return; } hanoi(n - 1, source, auxiliary, target); // Step 1: Move n-1 disks to auxiliary
printf("Move disk %d from %c to %c\n", n, source, target); // Step 2: Move the nth disk
hanoi(n - 1, auxiliary, target, source); // Step 3: Move n-1 disks from auxiliary to target }

int main() { int n; // Number of disks printf("Enter the number of disks: "); scanf("%d", &n);
hanoi(n, 'A', 'C', 'B'); // A is source, C is target and B is auxiliary return 0; }
問:為什麼有的問題只能用遞迴解決
答:自我相似性:

許多問題具有自我相似的特性,即問題的某個部分與整體問題形式相似。在這種情況下,遞迴允許我們簡化問題,將其分解為相同型別的子問題(例如,漢諾塔、樹的遍歷等)。
複雜結構處理:

遞迴非常適合處理複雜的資料結構,例如樹和圖。對於樹的遍歷、圖的搜尋(如深度優先搜尋)等問題,遞迴提供了簡單直觀的解決方案。
簡化邏輯:

遞迴通常可以大大簡化程式碼邏輯。例如,在處理分治演算法(如歸併排序、快速排序)時,遞迴使得實現過程更為清晰,而使用迭代可能需要更復雜的狀態管理。
基於分治法:

許多演算法基於分治策略,解決一個大問題的過程是將其分解為更小的相似問題。這種情況下,遞迴是實現分治演算法的自然選擇,因為每次遞迴呼叫都在處理一個更小的子問題(如合併排序)。
狀態追蹤問題:

在解決問題時,遞迴可以透過函式呼叫棧自動管理狀態。例如,在解決問題時需要追蹤路徑、深度等智慧資訊,遞迴可以自然地保留這些狀態而無需額外的全域性變數。

基於AI的學習










相關文章