2024-2025-1 20241401 《計算機基礎與程序設計》 第十周學習總結
| 班級鏈接 | 2024計算機基礎與程序設計 |
|---|---|
| 作業要求 | 第十周作業 |
| 作業目標 | ①信息系統 ②數據庫與SQL ③人工智能與專家系統 ④人工神經網絡 ⑤模擬與離散事件 ⑥排隊系統 ⑦天氣與地震模型 ⑧圖形圖像 |
教材學習內容總結
《計算機科學概論》第12、13、14章
- 信息系統
- 信息系統:
幫助組織和分析數據的軟件,主要包括電子制表軟件和數據庫管理系統。 - 電子制表軟件:
使用單元格組織數據和計算新值的公式,如Excel。單元格可以通過行列標號引用,公式可以引用其他單元格的值和使用內置函數計算結果。 - 電子數據表:
具有多功能性和可擴展性,能夠對變化動態地做出響應,自動重新計算相關公式以生成最新結果。 - 數據庫管理系統:
包括存儲數據的物理文件、支持數據訪問和修改的軟件以及指定數據庫邏輯布局的數據庫模式。 - 人工智能
- 人工智能:
處理人類思想的建模和應用,包括圖靈測試作為衡量機器是否能像人一樣思考的方法。 - 知識表示:
包括語義網和檢索樹,語義網是知識的圖形化表示,捕捉對象間的關系;檢索樹是表示對抗性移動的知識的重要方法。 - 專家系統:
嵌入人類專家知識,采用規則定義條件以得出結論,適用于多種決策過程,如醫療診斷。 - 模擬、圖形學、游戲和其他應用
- 模擬:
計算的一個主要領域,涉及為復雜系統構建計算機模型并用模型進行實驗。模型是真實系統的抽象,系統被表示為一組對象或特征以及管理它們行為的規則。 - 模擬類型:
包括連續模擬和離散事件模擬。連續模擬中變化由偏微分方程表示,離散事件模擬中行為被表示為實體、屬性和事件。 - 排隊系統:
一種離散事件模擬,分析等待時間,使用隨機數字模擬事件的到達和持續。 - 計算機圖形學:
結合計算機、科學和繪畫藝術的領域,依賴數學方程模擬圖像中的自然現象,生成接近真實照片的圖像。 - 計算機游戲:
玩家可以與系統及玩家之間交互的虛擬世界,開發者使用游戲引擎創建游戲虛擬世界。
《C語言程序設計》第9章
- 變量的內存地址
- 指針變量的定義和初始化:
通過*進行指針變量的聲明和初始化過程。 - 間接尋址運算符:
使用間接尋址運算符來訪問指針指向的值。 - 按值調用與模擬按引用調用:
解釋了函數調用時的按值傳遞和如何模擬按引用傳遞。 - 函數指針及其應用
教材學習中的問題與解決過程
問題1:對于指針的增加和減少操作(如p++)如何影響指針的值?
AI:
在C語言中,指針的增加和減少操作(如 p++)會影響指針的值,具體影響取決于指針指向的數據類型。這些操作實際上是基于指針指向的數據類型的大小來進行的。以下是一些關鍵點:
- 指針的增量操作(p++):
- 當你對指針 p 執行 p++ 操作時,指針的值會增加。
- 增加的量是指針指向的數據類型的大小。例如,如果 p 是指向 int 的指針,而 int 通常是4個字節,那么 p++ 會使 p 的值增加4個字節(在32位系統中)或8個字節(在64位系統中)。
- 這意味著 p 將指向下一個 int 值。
- 指針的減量操作(p--):
- 類似地,p-- 會減少指針的值。
- 減少的量同樣是指針指向的數據類型的大小。
- 這意味著 p 將指向前一個 int 值。
- 指針的算術:
- 你也可以直接對指針進行加法或減法操作,如 p += 1 或 p -= 1。
- 這些操作同樣是基于指針指向的數據類型的大小來增加或減少指針的值。
- 指針類型和大小:
- 指針增加或減少的具體字節數取決于指針指向的數據類型的大小,這個大小可以通過 sizeof 運算符獲得。
- 對于不同類型的指針(如 char、int、float 等),增加或減少的量會不同。
5.跨類型操作: - 如果你嘗試對指向不同數據類型的指針進行增加或減少操作,可能會導致未定義行為,因為不同類型占用的內存大小不同。
6.指針越界: - 增加或減少指針的值時,需要小心不要越界,即不要讓指針指向不屬于數組或分配的內存區域的地址。
7.指針和數組: - 當指針用于數組時,p++ 會使指針移動到數組的下一個元素。
問題2:當未知存入數據大小時,如何操作才能避免緩沖區溢出問題?
AI:
- 使用安全的函數:替代不安全的函數,如使用 strncpy()、strncat()、snprintf() 等函數代替 strcpy()、strcat()、sprintf() 等,這些函數允許指定最大操作長度,從而有效防止緩沖區溢出
- 邊界檢查:在對數組進行訪問時,務必確保索引值在數組的有效范圍內。在編寫代碼時,加入明確的邊界檢查邏輯,防止數組下標越界導致緩沖區溢出
- 內存操作邊界檢查:對于動態分配內存的操作,如使用 malloc()、calloc() 等函數分配內存后,在使用該內存區域時要進行邊界檢查,確保不會超出所分配內存的范圍
- 初始化變量:初始化所有變量,特別是用作數組索引的變量,以避免未定義行為
- 避免使用不安全的函數:避免使用像 gets() 這樣已知不安全的函數,這個函數不檢查目標緩沖區的大小,容易造成溢出
- 使用高級語言特性或庫:考慮使用C++中的 std::string 和 std::vector 等容器,它們自動管理內存,減少了緩沖區溢出的風險
- 編譯器和工具的使用:使用編譯器的警告和錯誤檢查功能,例如GCC的 -Wall -Wextra 選項,可以幫助發現潛在的緩沖區溢出問題。使用靜態代碼分析工具,如 Clang Static Analyzer,來檢測代碼中的緩沖區溢出漏洞
- 代碼審查和測試:定期進行代碼審查,特別關注那些處理外部輸入或進行大量內存操作的代碼段。編寫和執行針對緩沖區溢出的單元測試,確保代碼在邊緣條件下也能正常工作
- 地址空間布局隨機化:操作系統可以通過隨機化內存分配來增加攻擊者預測目的地址的難度,防止攻擊者直接定位攻擊代碼位置,達到阻止溢出攻擊的目的
- 棧保護:開啟棧保護機制,如使用 -fstack-protector-strong 編譯器選項,可以幫助檢測緩沖區溢出攻擊,并在程序運行時進行防御
基于AI的學習


學習進度條
計劃學習時間:25h
實際學習時間:25h

浙公網安備 33010602011771號