跳轉到內容

程式設計基礎/實踐:函式

來自華夏公益教科書,開放的書籍,開放的世界

章節摘要

[編輯 | 編輯原始碼]
  • 模組化程式設計 - 一種軟體設計技術,強調將程式的功能分離成獨立的、可互換的模組,以便每個模組包含執行所需功能的某個方面所需的一切。[1]
  • 層次結構圖或結構圖 - 傳達程式中各種函式的關係或總體情況。
  • 函式示例
  • 引數和實參 - 引數是一種特殊的變數,用於函式中引用作為輸入提供給函式的資料片段。 這些資料片段是函式將被呼叫/執行時的實參的值。
  • 值傳遞 vs 引用傳遞 - 引數可以透過兩種不同的方法傳遞,具體取決於語言。
    • 值傳遞 將引數作為原始值的副本傳遞,在記憶體中建立第二個位置,這本質上是一個新的區域性變數。 對值傳遞引數所做的任何更改只會影響傳入的值,而不會影響呼叫者傳入的值。 這是大多數現代程式語言使用最常見的方法。
    • 引用傳遞 使用單個記憶體位置傳遞引數,這本質上將呼叫函式中的原始引數傳遞進來。 被呼叫函式對引用傳遞引數所做的任何更改也會更改呼叫函式中該引數的值。[2]
  • 返回語句 - 使函式的結果離開當前函式,並在程式碼中函式被呼叫後的位置立即恢復。
  • 空資料型別 - 一種沒有值或運算子的資料型別,用於表示什麼都沒有。
  • 作用域 - 原始碼檔案中識別識別符號名稱的區域。
  • 程式設計風格 - 一組編寫計算機程式原始碼時使用的規則或指南。
  • 標準庫 - 定義已經編寫好的通用函式,這些函式可以隨時在任何程式中使用。

複習問題

[編輯 | 編輯原始碼]

判斷題

[編輯 | 編輯原始碼]
  1. 除了子程式的名稱“函式”之外,計算機行業還使用宏、過程和模組。
  2. 一般來說,函式分為兩類:程式控制和特定任務。
  3. 函式必須始終有返回值。
  4. 層次結構圖和結構圖基本上是一樣的。
  5. 程式控制函式用於簡單地細分和控制程式。
  6. 空資料型別在 C++ 中很少使用。
  7. 使原始碼可讀僅供初學者使用。
  8. 使用者定義的特定任務函式通常放置在使用者定義的庫中。
  9. 區域性和全域性資料儲存與作用域的概念相關聯。
  10. 為使用者定義的特定任務函式建立標頭檔案是一項困難的任務。
  11. 堆疊是計算機記憶體的一部分,用於儲存資料。
  12. 標準庫是一組特定任務函式,這些函式已新增到程式語言中以供通用使用。
  13. 程式設計師應該相信標準庫函式能夠正常工作。
  14. 不使用特定任務函式編寫程式會更容易。
  15. 為了將一個函式的功能與另一個函式的功能分開,你需要為每個函式指定自己的引數。
  16. 值傳遞會計算實參並將實參的值副本傳遞給子例程。
  17. 所有函式都應該從“輸出”中呼叫,因為“輸出”需要從其他函式中呼叫資訊才能獲得正確的輸出。
  18. 函式只能返回 1 個輸出。

答案

  1. 正確
  2. 正確
  3. 錯誤 - 函式並不總是需要返回值,如果函式不會跳回到呼叫它的函式,那麼就不需要返回值。
  4. 正確 - 這兩個名稱都源於顯示業務的組織/結構,或不同模組之間的關係。
  5. 正確
  6. 錯誤 - 如果函式在 C++ 中不返回值,那麼可以在函式的引數列表中使用空。
  7. 錯誤 - 使原始碼可讀應該是所有程式設計師的優先事項。
  8. 正確
  9. 正確
  10. 錯誤 - 乍一看可能很困難,但只要多練習一下,其實很簡單。
  11. 正確
  12. 正確
  13. 正確
  14. 錯誤 - 對於非常簡單的程式碼來說,情況可能如此,但當程式變得複雜時,使用函式變得至關重要。
  15. 正確
  16. 正確
  17. 錯誤 - 所有函式都應該從 main 中呼叫,因為 main 負責其他函式。
  18. 正確 - 只有 Python 能夠從單個函式返回多個變數。

簡答題

[編輯 | 編輯原始碼]
  1. 為本章中找到的函式示例程式建立一個層次結構圖。
  2. 回顧你已經為本課程建立的程式。 基於你選擇的程式語言的編碼標準,確定一些使你的程式碼“無文件”、“不可讀”或在其他方面錯誤的問題。
  3. 描述區域性作用域和全域性作用域之間的區別。
  4. 想想當你正在建立一個需要傳遞多個引數的函式時。 然後在呼叫該函式時,你應該按照什麼順序放置這些引數,為什麼?
  5. 用你自己的話說,描述值傳遞和引用傳遞之間的區別。
  6. 解釋空資料型別和 Nothing 資料型別之間的區別。
  7. 解釋為什麼在程式中擁有多個函式比在 Main() 函式中擁有所有內容更有用。

使用虛擬碼、流程圖工具或你選擇的程式語言完成以下練習。 為輸入、每種型別的處理和輸出使用單獨的函式。 透過傳遞引數和返回值來避免全域性變數。 建立測試資料以驗證每個程式的準確性。 在程式頂部添加註釋幷包括對任何使用資源的引用。

  1. 建立一個程式,提示使用者輸入小時數和每小時工資,然後計算並顯示他們的每週、每月和每年總工資(小時數 * 工資)。 每月和每年的計算以一年 12 個月和 52 周為基礎。[3]
  2. 建立一個程式,詢問使用者他們用年計算的年齡,然後計算並顯示他們的近似年齡(以月、天、小時和秒計)。 例如,1 歲的兒童為 12 個月,365 天等。
  3. 回顧 MathsIsFun:美式標準長度。 建立一個程式,詢問使用者以英里為單位的距離,然後計算並顯示以碼、英尺和英寸為單位的距離,或者詢問使用者以英里為單位的距離,然後計算並顯示以公里、米和釐米為單位的距離。
  4. 回顧 MathsIsFun:平面圖形的面積。 建立一個程式,詢問使用者不同形狀的尺寸,然後計算並顯示這些形狀的面積。 不要包含形狀選擇。 這將在後面進行。 現在,只需依次包含多個形狀計算即可。
  5. 建立一個程式,計算房間的面積以確定所需的鋪地板材料量。 房間是長方形的,尺寸以英尺和十進位制小數測量。 輸出需要以平方碼為單位。 1 碼等於 3 線性英尺(9 平方英尺)。
  6. 編寫一個程式,幫助使用者確定粉刷房間所需的油漆量以及費用。向用戶詢問房間的長度、寬度和高度,以及一加侖油漆的價格和一加侖油漆可以覆蓋的平方英尺數。計算四個牆壁的總面積為 2 * length * height + 2 * width * height 計算油漆數量: 總面積 / 每加侖平方英尺 注意:必須向上取整到下一整加侖。要向上取整,請新增 0.9999,然後將結果值轉換為整數。計算油漆的總成本為: 加侖數 * 每加侖價格.
  7. 檢視 維基百科:狗的衰老。編寫一個程式,提示使用者輸入他們狗的名字及其人類年齡。根據流行的神話,一個人年等於七個狗年,計算並顯示他們狗的狗年年齡。請務必在輸出中包含狗的名字,例如
        Spike 的狗年年齡是 14 歲。

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書