學期 2024-2025-1 學號 20241311 《計算機基礎與程式設計》第十一週學習總結
作業資訊
這個作業屬於哪個課程 | <班級的連結> 2024-2025-1-計算機基礎與程式設計) |
---|---|
這個作業要求在哪裡 | <作業要求的連結>2024-2025-1計算機基礎與程式設計第十一週作業) |
這個作業的目標 | <寫上具體方面> |
作業正文 | ... 本部落格連結 |
教材學習內容總結
《電腦科學概論》第七版第十章學習總結
在深入學習了《電腦科學概論》第七版的第十章後,我對本章內容有了全面的理解和掌握。以下是我對本章的學習總結:
章節概述
本章主要介紹了計算機網路與網際網路的基礎知識。它詳細闡述了計算機網路的定義、分類、組成以及網際網路的工作原理,為我後續深入理解計算機之間的通訊奠定了堅實的基礎。
關鍵概念與理解
-
計算機網路定義:
- 計算機網路是指將地理位置分散的多臺計算機透過通訊裝置和線路連線起來,按照網路協議進行資料傳輸,實現資源共享和資訊交流的系統。
-
網路分類:
- 按覆蓋範圍分類:區域網(LAN)、都會網路(MAN)、廣域網(WAN)。
- 按拓撲結構分類:匯流排型、星型、環型、網狀等。
-
網路組成:
- 硬體裝置:伺服器、工作站、交換機、路由器等。
- 軟體系統:網路作業系統、網路通訊協議、網路管理軟體等。
-
網際網路工作原理:
- 網際網路是基於TCP/IP協議棧的全球性計算機網路。
- TCP/IP協議分為四層:鏈路層、網路層、傳輸層和應用層。
- 網際網路透過DNS系統實現域名到IP地址的解析,透過路由協議實現資料包的傳輸和路由選擇。
-
網路應用:
- 常見的網路應用包括電子郵件、網頁瀏覽、檔案傳輸、遠端登入等。
- 這些應用都依賴於底層網路協議和技術的支援。
《C語言程式設計第五版》第十章學習總結
在完成了《C語言程式設計第五版》第十章的學習後,我對本章所涵蓋的內容進行了深入的總結和反思。以下是我對本章知識點的理解和學習心得。
章節內容概述
第十章主要圍繞C語言中的結構體、聯合體與列舉進行介紹。這一章是C語言中較為高階的資料結構部分,對於編寫複雜程式和處理複雜資料至關重要。
關鍵知識點總結
-
結構體(struct):
- 結構體是一種使用者自定義的資料型別,它允許將不同型別的資料組合在一起,形成一個新的資料型別。
- 透過結構體,可以方便地處理具有多個屬性的實體,如學生的姓名、年齡和成績等。
- 結構體的定義、宣告和初始化方法,以及如何透過結構體指標訪問其成員。
-
聯合體(union):
- 聯合體也是一種使用者自定義的資料型別,但與結構體不同的是,聯合體中的所有成員共享同一塊記憶體空間。
- 聯合體的主要用途是節省記憶體空間,當多個成員不會同時使用時,可以選擇使用聯合體。
- 瞭解了聯合體的定義、使用方法和注意事項。
-
列舉(enum):
- 列舉是一種列舉型別,它用於定義一組命名的整數常量。
- 列舉使程式碼更加清晰和易於維護,特別是在處理具有有限取值的變數時。
- 掌握了列舉的定義、使用方法和在程式中的應用。
-
型別定義(typedef):
typedef
關鍵字用於為現有的資料型別定義一個新的名字,從而簡化程式碼的書寫。- 學會了如何使用
typedef
為結構體、聯合體等複雜資料型別定義簡潔的名字。
教材學習中的問題和解決過程(先問 AI)
(一個模板:我看了這一段文字 (引用文字),有這個問題 (提出問題)。 我查了資料,有這些說法(引用說法),根據我的實踐,我得到這些經驗(描述自己的經驗)。 但是我還是不太懂,我的困惑是(說明困惑)。【或者】我反對作者的觀點(提出作者的觀點,自己的觀點,以及理由)。 )
- 問題1:TCP和UDP的區別以及它們在不同應用場景中的選擇策略
- 問題1解決方案:
TCP和UDP的區別
TCP | UDP | |
---|---|---|
面向連線與無連線 | 面向連線 | 無連線 |
連線建立 | 傳輸前需三次握手建立連線 | 無需建立連線,直接傳送資料 |
資料傳輸方式 | 基於位元組流,無明確邊界 | 基於資料包,有明確邊界 |
可靠性 | 提供可靠傳輸,透過確認應答、重傳機制確保資料完整性 | 不保證資料可靠傳輸,可能丟包 |
有序性 | 保證資料按順序到達 | 不保證資料順序 |
流量控制與擁塞控制 | 有流量控制和擁塞控制機制 | 無流量控制和擁塞控制 |
傳輸效率 | 相對較低,但可靠 | 較高,適用於對實時性要求高的應用 |
資源佔用 | 系統資源佔用較多 | 系統資源佔用較少 |
應用場景 | 適用於對資料傳輸可靠性和順序性要求高的應用 | 適用於對實時性要求高、可容忍一定丟包率的應用 |
TCP和UDP在不同應用場景中的選擇策略
-
TCP的應用場景
- 網頁瀏覽:HTTP/HTTPS協議基於TCP,需要確保網頁內容完整、安全性高。
- 檔案傳輸:如FTP(檔案傳輸協議),需要保證檔案的準確傳輸。
- 電子郵件:SMTP、IMAP和POP3等電子郵件協議均依賴TCP來保障郵件的可靠投遞。
- 遠端登入:如SSH、Telnet等協議,需要確保資料傳輸的安全性和可靠性。
- 資料庫連線:許多資料庫連線協議都使用TCP來確保資料的完整性和可靠性。
-
UDP的應用場景
- 實時影片流:如視訊會議、實時直播等,對延遲敏感,不需要每一幀都可靠到達。
- 線上遊戲:許多實時遊戲需要快速傳輸資料,稍微的資料丟失不會影響遊戲體驗。
- VoIP(語音通話):對實時性要求高,可容忍少量資料丟失。
- DNS查詢:域名解析使用UDP,因其對響應時間的要求高於對可靠性的要求。
- 實時資料監控:如股票交易系統、實時監控系統等,對資料的實時性要求高。
選擇策略
在選擇使用TCP還是UDP時,應根據應用的具體需求來決定。如果應用需要確保資料的完整性和可靠性,且對實時性要求不高,那麼TCP是更好的選擇。而如果應用對實時性要求高,且可以容忍一定的資料丟失,那麼UDP可能更為合適。此外,還需要考慮系統的資源佔用、網路狀況等因素。例如,在嵌入式系統或物聯網裝置中,由於資源有限,可能會更傾向於選擇資源佔用較少的UDP協議。
- 問題2:路由協議如何根據網路拓撲和鏈路狀態選擇最佳路徑進行資料傳輸。
- 問題2解決方案:
路由協議根據網路拓撲和鏈路狀態選擇最佳路徑進行資料傳輸的過程,是確保網路高效執行的關鍵。這一過程涉及多個方面,包括路由協議的型別、選路演算法、度量值(metric)的計算,以及網路拓撲和鏈路狀態資訊的更新與利用。以下是對這一過程的詳細分析:
路由協議的型別
路由協議主要分為兩大類:
- 靜態路由協議:由網路管理員手動配置路由表,指定每個網路節點的下一跳節點及相關引數。靜態路由協議配置簡單,但不適用於大規模或頻繁變動的網路拓撲。
- 動態路由協議:路由器之間透過交換路由資訊來自動更新路由表。常見的動態路由協議包括RIP、OSPF、BGP等。動態路由協議能夠根據網路拓撲和鏈路狀態的變化實時調整路由表,從而選擇最佳路徑進行資料傳輸。
選路演算法
選路演算法是路由協議的核心,用於確定資料傳輸的最佳路徑。常見的選路演算法包括距離向量路由演算法和鏈路狀態路由演算法。
- 距離向量路由演算法:透過測量到達其他網路的距離來選擇路徑。這個“距離”通常由跳數、時間延遲或頻寬等因素衡量。路由器會根據鄰居路由器提供的資訊更新自己的路由表,並選擇最短路徑進行資料傳輸。
- 鏈路狀態路由演算法:考慮網路中所有的鏈路狀態,包括距離、時間、負載和頻寬等影響路由的因素。每個路由器都會構建整個網路的拓撲圖,並根據拓撲圖計算最佳路徑。OSPF就是一種典型的鏈路狀態路由協議。
度量值的計算
在動態路由協議中,度量值用於衡量路徑的優劣。不同的路由協議可能會使用不同的度量值標準。例如,RIP通常使用跳數作為度量值,而OSPF則可能使用頻寬、延遲、可靠性等多個因素的綜合評估作為度量值。路由器會根據度量值的大小選擇最佳路徑進行資料傳輸。
網路拓撲和鏈路狀態資訊的更新與利用
為了確保路由協議能夠選擇最佳路徑進行資料傳輸,網路拓撲和鏈路狀態資訊必須保持實時更新。路由器會定期或根據需要向鄰居路由器傳送鏈路狀態更新資訊,包括鏈路的可用性、頻寬、延遲等。這些資訊將被用於更新路由表,從而反映網路的當前狀態。
選擇最佳路徑進行資料傳輸的過程
當路由器接收到一個資料包時,它會根據路由表中的資訊選擇最佳路徑進行資料傳輸。這個過程可能涉及多個步驟,包括查詢路由表、計算度量值、比較不同路徑的優劣等。最終,路由器會選擇一條最佳路徑,並將資料包轉發到下一跳路由器,直到資料包到達目的地。
基於AI的學習
我正在學習字串字面量的知識點請你以蘇格拉底的方式對我進行提問,一次一個問題

文心一言(ERNIE-4.0-Turbo-8K)
那好,我便以蘇格拉底的方式來提問你,讓我們一同探索這字串字面量的奧秘。
問題一:你能否先為我闡述一下,何為字串字面量?它在程式設計中扮演著怎樣的角色呢?
由一對雙引號括起來的一個字元序列;基礎性角色

文心一言(ERNIE-4.0-Turbo-8K)
很好,你的回答簡潔明瞭。那麼,我再問你:
問題二:在程式設計中,字串字面量除了由雙引號括起來之外,是否還有其他形式來表示它呢?比如,在某些特定的程式語言或場景下。
字元陣列的形式

文心一言(ERNIE-4.0-Turbo-8K)
你的回答很有深度,確實觸及了字串字面量的另一種表現形式。那麼,我接著問:
問題三:在C語言這類程式語言中,字串字面量與字元陣列有何異同?它們在記憶體中的儲存方式又有何不同呢?
不知道請你回答

文心一言(ERNIE-4.0-Turbo-8K)
好,那我來為你解答。
在C語言中,字串字面量與字元陣列確實存在異同。
相同點:
• 它們都可以用來表示和儲存一系列字元。
不同點:
• 字串字面量:通常是以雙引號括起來的字元序列,在記憶體中通常儲存在只讀的資料段中,且其末尾會自動新增一個空字元('\0')作為結束標誌。它不能被修改,因為其儲存在只讀區域。
• 字元陣列:可以是透過定義和初始化來建立的,可以儲存在棧上或堆上(透過動態分配),並且可以被修改。字元陣列不一定需要以空字元結尾,除非它被用作字串處理。
在記憶體中的儲存方式方面:
• 字串字面量通常儲存在程式的只讀資料段中,程式執行時不能對其內容進行修改。
• 字元陣列則根據定義的位置(如棧上、堆上)和初始化方式來分配記憶體,並且可以在程式執行過程中被修改。
希望這個解釋能幫助你更好地理解字串字面量與字元陣列在C語言中的區別。那麼,你還有其他關於字串字面量的問題嗎?
沒有了
程式碼除錯中的問題和解決過程
- 問題1:變數 num 未初始化:在計算總價格時,變數 num 未初始化,可能會導致未定義行為。
- 問題1解決方案:初始化變數 num:在計算總價格之前,初始化 num 為 0。
- 問題2:結構體定義中的雙花括號也是不必要的。
- 問題2解決方案:正確交換結構體內容:使用臨時變數 temp 來交換結構體的內容,而不是指標。
- ...
上週考試錯題總結
- 錯題1及原因,
問題:理解情況字串沒有正確倒序輸出
原因: 迴圈的起始條件設定錯誤,應該是 i = length - 1 而不是 i = 0。
解決: 檢查迴圈的起始條件,並確保它是從字串的最後一個字元開始。 - 錯題2及原因,理解情況
問題:輸出包含字串末尾的空字元
原因: 字串在C語言中以空字元 '\0' 結尾,迴圈沒有正確地排除這個空字元。
解決: 確保迴圈在遇到空字元之前停止。可以透過檢查 str[i] != '\0' 來實現,或者更簡單地,使用 length - 1 作為迴圈的上限,因為 strlen 函式返回的長度不包括空字元。 - ...
其他(感悟、思考等,可選)
菜就多練
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 200/200 | 2/2 | 20/20 | |
第二週 | 300/500 | 2/4 | 18/38 | |
第三週 | 500/1000 | 3/7 | 22/60 | |
第四周 | 900/1300 | 2/9 | 30/90 | |
第五週 | 1200/1200 | 2/2 | 20/20 | |
第六週 | 1300/1500 | 2/4 | 18/38 | |
第七週 | 900/1000 | 3/7 | 22/60 | |
第八週 | 1300/1300 | 2/9 | 30/90 | |
第九周 | 1100/1200 | 2/2 | 20/20 | |
第十週 | 1300/1500 | 2/4 | 18/38 | |
第十一週 | 500/1000 | 3/7 | 22/60 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟體工程軟體的估計為什麼這麼難,軟體工程 估計方法
-
計劃學習時間:XX小時
-
實際學習時間:XX小時
-
改進情況:
(有空多看看現代軟體工程 課件
軟體工程師能力自我評價表)
參考資料
- 《電腦科學概論(第七版)》
- ...