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

20241307张岳峰發表於2024-12-08

作業資訊

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

教材學習內容總結

第15章:資料庫與資訊管理

  1. 資料庫系統基礎
    • 基本概念:資料庫是高價值、大量、多使用者訪問的有組織電子資料集合。
    • 資料獨立性:資料獨立性涉及資料的物理儲存和邏輯結構的分離,使得資料變化對應用程式透明。
    • 概念模型:概念模型是現實世界到資訊世界的抽象,用於定義資料和資料之間的關係。
    • 資料庫系統結構:包括資料庫、資料庫管理系統(DBMS)、資料庫應用和資料庫管理員。
  2. 關聯式資料庫
    • 關係資料結構:以行和列的形式儲存資料,表代表實體,透過鍵值關聯。
    • 關係完整性:包括實體完整性和參照完整性,確保資料的準確性和一致性。
    • 關係代數:一種用於操作關聯式資料庫的數學語言,包括選擇、投影、連線等操作。
  3. SQL語言
    • 資料定義:包括模式、表和索引的定義。
    • 資料查詢:使用SELECT語句檢索資料。
    • 資料更新:包括插入、修改和刪除資料的操作。
    • 檢視:建立和刪除檢視,檢視是虛擬表,用於簡化複雜的查詢。
  4. 資料庫安全性控制
    • 授權與審計:控制使用者對資料的訪問許可權,並記錄資料訪問行為。
  5. 規範化
    • 函式依賴:透過函式依賴進行規範化,以減少資料冗餘和提高資料一致性。
  6. 資料庫設計
    • 設計步驟:包括需求分析、概念性設計、邏輯設計和物理設計。
  7. 資料恢復技術
    • 事務概念:事務是一組原子性的資料庫操作,具有ACID特性(原子性、一致性、隔離性、永續性)。
    • 故障恢復:包括備份和恢復技術,以保證資料庫的高可用性。
    第16章:計算機網路
  8. 計算機網路體系結構
    • 網路概述:計算機網路是連線多臺計算機或裝置的系統,透過資料鏈路進行通訊和資源共享。
    • 網路體系結構與參考模型:包括ISO/OSI參考模型和TCP/IP模型,它們定義了網路通訊的層次結構和協議。
  9. 物理層
    • 通訊基礎:包括奈奎斯特定理、夏農定理、編碼與調製等基本概念。
    • 傳輸介質:包括雙絞線、同軸電纜、光纖和無線傳輸介質。
  10. 資料鏈路層
    • 功能:為網路層提供服務,包括鏈路管理、封裝成幀、流量控制和差錯控制。
    • 組幀:不同的組幀技術,如字元計數法、首尾定界符法等。
    • 差錯控制:包括檢錯編碼和糾錯編碼。
    • 流量控制與可靠傳輸機制:如滑動視窗機制、停止-等待協議等。
  11. 網路層
    • 功能:包括異構網路互聯、路由轉發和擁塞控制。
    • 路由演算法和協議:包括靜態路由與動態路由、距離-向量路由演算法等。
    • IPv4與IPv6:包括地址分配、NAT、子網劃分等。
  12. 傳輸層
    • 服務:提供端到端的資料傳輸服務,包括UDP和TCP協議。
  13. 網路安全
    • 安全措施:包括使用SSL/TLS加密資料傳輸、設定防火牆監控流量、採用入侵檢測和預防系統(IDS/IPS)。
  14. 網路應用
    • 電子郵件:透過SMTP、IMAP/POP3等協議實現訊息傳遞。
    • 網頁瀏覽:藉助HTTP/HTTPS協議,瀏覽器解析和展示網頁內容。
    • 檔案傳輸:透過FTP和P2P技術共享檔案。

《C語言程式設計》第十章的詳細內容總結:
第十章:字串處理和檔案操作

  1. 字串字面量和儲存
    • 介紹了字串字面量的概念和使用方法,以及字串在記憶體中的儲存方式,包括字元陣列的使用。
  2. 字串指標
    • 討論了字串指標的概念,以及如何透過指標操作字串。
  3. 字串的訪問和輸入/輸出
    • 介紹瞭如何訪問字串中的單個字元,以及字串的輸入和輸出方法。包括透過索引和指標訪問字串字元的方法,以及使用標準輸入輸出函式處理字串的方法。
  4. 字串處理函式
    • 概述了常用的字串處理函式,如複製(strcpy)、連線(strcat)、搜尋(strstr)等操作。
  5. 向函式傳遞字串
    • 討論瞭如何將字串作為引數傳遞給函式,以及相關的注意事項。
  6. 從函式返回字串指標
    • 講解了如何從函式中返回字串指標,以及記憶體管理的相關問題。
  7. const型別限定符
    • 介紹了const在字串操作中的應用,用於保護字串不被修改。
  8. 數值字串向數值的轉換
    • 講解了如何將字串表示的數值轉換為數值型別,如atoi(轉換為整數)和atof(轉換為浮點數)。
  9. 檔案操作
    • 詳細介紹了檔案操作的相關函式,包括fopen、fclose、fread、fwrite、fprintf、fscanf、fgets、fputc、fgetc等的使用,以及檔案指標和檔案緩衝區的概念。
  10. 動態記憶體分配
    • 介紹了malloc、calloc、realloc、free等函式的使用,這些函式用於在堆上動態分配和釋放記憶體。
  11. 指標的高階應用
    • 包括指標和陣列的關係、指標和函式的關係、指標的指標等內容。
  12. 綜合程式設計
    • 第十章還可能包含綜合程式設計內容,如通訊錄程式設計例項,體現軟體工程思想,詳細介紹了C語言應用程式的設計方法與過程。

教材學習中的問題和解決過程(先問 AI)

  • 問題1:字串操作問題
    問題描述:在使用字串函式時,可能會遇到字串未正確終止、緩衝區溢位或函式引數錯誤等問題。
  • 問題1解決方案:• 確保字串以空字元('\0')正確終止。
    • 使用sizeof運算子來防止緩衝區溢位。
    • 在使用字串函式時,仔細檢查引數,確保它們是正確的型別和格式。
  • 問題2 指標和記憶體管理問題
    問題描述:可能會遇到野指標、記憶體洩漏或無效的記憶體訪問等問題。
  • 問題2解決方案:• 初始化所有指標,避免使用未初始化的指標。
    • 使用malloc和calloc分配記憶體後,確保檢查返回值以確認記憶體分配成功。
    • 使用free釋放記憶體後,將指標設定為NULL,避免懸掛指標問題。
    • 使用記憶體洩漏檢測工具,如Valgrind,來識別和修復記憶體洩漏。
  • 問題3:動態記憶體分配問題
    問題描述:在使用動態記憶體分配時,可能會遇到記憶體不足或未能正確釋放記憶體的問題。
  • 問題3解決方案:
    • 總是檢查malloc、calloc和realloc的返回值,確保它們沒有返回NULL。
    • 避免重複釋放已釋放的記憶體。
    • 使用動態記憶體分配時,確保分配和釋放操作成對出現,以防止記憶體洩漏。

基於AI的學習





程式碼除錯中的問題和解決過程

  • 問題1: 編譯錯誤
    問題描述:程式碼無法透過編譯器的編譯過程,編譯器會給出錯誤資訊。
    可能原因:
    • 語法錯誤,如缺少分號、括號不匹配、拼寫錯誤等。
    • 型別不匹配,例如將整型變數賦值給浮點型變數而沒有進行型別轉換。
    • 未定義的變數或函式。
    • 標頭檔案缺失,導致編譯器找不到相應的函式宣告或型別定義。
  • 問題1解決方案:• 仔細閱讀編譯器的錯誤資訊,通常編譯器會指出錯誤發生的行號和可能的原因。
    • 檢查程式碼中的語法,確保所有的語句都正確結束,所有的控制結構都正確閉合。
    • 確保所有變數和函式在使用前都已正確宣告。
    • 檢查是否包含了所有必要的標頭檔案。
  • 問題2: 執行時錯誤
    問題描述:程式能夠編譯透過,但在執行時出現異常,如段錯誤、非法記憶體訪問等。
    可能原因:
    • 指標錯誤,如解引用空指標或未初始化的指標。
    • 陣列越界,訪問陣列時超出了其分配的記憶體範圍。
    • 除以零或無效的數學運算。
  • 問題2解決方案:• 使用除錯工具(如GDB)逐步執行程式,觀察變數的值和程式的執行流程。
    • 檢查所有指標操作,確保指標指向有效的記憶體區域。
    • 對陣列操作新增邊界檢查,確保不會越界。
    • 檢查所有的數學運算,避免除以零等非法操作。
  • 問題3:程式能夠編譯並執行,但輸出的結果不符合預期。
    可能原因:
    • 演算法實現錯誤,程式的邏輯與預期不符。
    • 條件判斷錯誤,如使用==代替=,或者邏輯運算子使用不當。
    • 資料處理錯誤,如錯誤的迴圈條件或錯誤的變數更新。
  • 問題3解決方案:• 仔細檢查演算法的邏輯流程,確保每一步操作都符合預期。
    • 檢查所有的條件語句,確保條件判斷正確。
    • 檢查迴圈和變數更新,確保它們按照預期工作。
    • 使用列印語句(如printf)在關鍵位置輸出變數值,幫助追蹤程式的執行流程和資料變化。

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

學習了 C 語言程式設計第十章以及電腦科學概論 15、16 章後,我猶如在計算機知識的海洋中經歷了一場奇妙的航行,收穫頗豐且感觸良多。

C 語言程式設計第十章深入探討了指標與陣列等重要概念,讓我對計算機記憶體的操作有了更直接、更精準的掌控手段。透過指標,我彷彿觸控到了資料在記憶體中跳動的脈搏,理解了地址與資料值之間微妙而緊密的聯絡。陣列與指標的結合使用,既展示了 C 語言的靈活性與高效性,也讓我在編寫程式碼時不得不更加謹慎地考慮記憶體管理與資料邊界問題,這無疑是對我程式設計思維嚴謹性的一次深度錘鍊。

而電腦科學概論的 15、16 章,可能聚焦於如人工智慧、複雜演算法等前沿或進階領域。這使我從更宏觀的視角審視電腦科學的多元性與深度。瞭解到人工智慧背後的複雜原理與技術體系,我驚歎於計算機不再僅僅是簡單的資料處理工具,而是能夠模擬人類智慧、進行自主學習與決策的智慧體。這讓我意識到電腦科學的邊界正在不斷擴充,未來無限的可能性正在被一點點揭開。

在這個過程中,我深刻體會到電腦科學各領域之間相互交織、相互促進的關係。C 語言作為基礎工具,為理解和實現更高階的電腦科學概念如人工智慧演算法提供了基石;而對前沿領域的探索又反過來促使我反思 C 語言程式設計中的最佳化與創新方向。我也認識到持續學習與深入鑽研的重要性,電腦科學這片浩瀚星空,每一顆星都需要我們用心去觀測、去理解,才能在不斷的知識積累與思維突破中,在這片充滿挑戰與機遇的領域中開拓屬於自己的天地,為未來計算機技術的發展貢獻一份微薄卻充滿熱情的力量。

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 4/4 18/38
第三週 500/1000 5/7 22/60
第四周 500/1300 6/9 30/90
第五週 1000/1400 7/9 60/90
第六週 1200/1500 8/9 70/90
第七週 1400/1600 9/10 80/100
第八週 1600/1700 10/11 100/100
第九周 1900/1900 11/11 110/110
第十週 2100/2100 12/12 130/130
第十一週 2600/2600 13/13 150/150

相關文章