歡迎來到程式設計的核心!
在本章中,我們將探討程序化程式設計(procedural programming)的基礎架構。試著將程式想像成一道食譜:你需要準備材料(數據/資料)、操作指示(語句/敘述),以及處理突發狀況的方法(異常處理)。在閱讀完這些筆記後,你將學會如何使用每位程式設計師都必須掌握的基本結構與電腦「對話」。別擔心內容看起來很多——我們將循序漸進,一步步來!
1. 基礎架構:語句類型
在程序化程式設計中,我們會給電腦一系列指令。你需要了解五種主要的語句類型:
關鍵語句類型
1. 變數宣告(Variable Declaration):這就像是在告訴電腦:「嘿,在記憶體裡留個位置給我存一個值,並把它命名為 'Score'。」
2. 賦值(Assignment):將數值存入變數中。例如:Score = 10。
3. 選擇(Selection):進行決策。如果條件成立(True),則執行某件事;否則,執行另一件事(使用 IF 或 CASE 語句)。
4. 迭代(Iteration):重複執行一段程式碼(使用迴圈)。
5. 子程式(Subroutine):一個有名字的程式碼區塊,專門執行特定任務。當你需要時,可以隨時「呼叫」它。
輸入與輸出
如果程式無法與你互動,那它就沒什麼用處了!
- 輸出(Output):在螢幕上顯示資訊。
- 輸入(Input):透過鍵盤從使用者端獲取資訊。
識別碼名稱與註解
為變數命名時,請使用具備意義的識別碼名稱(meaningful identifier names)。與其將變數命名為 x,不如命名為 user_age。這會讓人類閱讀程式碼時更容易理解!
同樣地,請善用註解(comments)。這些是給人類看的筆記,電腦會自動忽略它們。它們的功能是解釋你為什麼要編寫這段程式碼。
重點複習:
- 使用有意義的名稱(例如:用 totalPrice 而不是 t)。
- 使用註解來解釋複雜邏輯。
- 選擇(Selection) = 做決定。迭代(Iteration) = 重複動作。
2. 算術運算
電腦本質上是非常快速的計算機。你需要熟悉以下運算:
- 加法 (+) 與 減法 (-)。
- 乘法 (*) 與 實數/浮點數除法 (/):這會給出完整的答案,例如: \( 7 / 2 = 3.5 \)。
- 整數除法 (DIV):這會告訴你一個數除以另一個數可以包含幾個「完整」的數。例如: \( 7 \text{ DIV } 2 = 3 \)。
- 餘數 (MOD):這會告訴你除法之後剩下的「餘數」。例如: \( 7 \text{ MOD } 2 = 1 \)。
- 指數運算(冪運算):將數值進行乘方(例如: \( 2^3 = 8 \))。
- 四捨五入(Rounding):將數值調整至最接近的整數或小數位。
- 截斷(Truncation):直接切除小數部分,不進行四捨五入。
記憶小撇步:
將 MOD 想像成「剩下來的東西」。如果你有 7 個餅乾要分給 2 個人,每人可以拿 3 個(這就是 DIV),最後會剩下 1 個餅乾(這就是 MOD)!
3. 關係運算與布林運算
選擇語句(如 IF)依賴關係運算子(Relational Operators)來進行判斷:
- 等於 (= 或 ==)
- 不等於 (!= 或 <>)
- 小於 (<)
- 大於 (>)
- 小於或等於 (<=)
- 大於或等於 (>=)
布林邏輯(AND, OR, NOT, XOR)
有時候你需要結合多個條件進行判斷。
- AND:兩個部分都必須為真(True)。
- OR:至少有一個部分為真。
- NOT:反轉結果(真變為假,假變為真)。
- XOR(互斥或):其中一個為真,但不能兩個都為真。
優先順序
當有一連串的邏輯判斷時,電腦會遵循特定的優先順序:
1. NOT(最高優先級)
2. AND
3. OR(最低優先級)
常見誤區:不要誤以為 OR 是互斥的。在程式設計中,如果兩邊條件皆為真,OR 的結果依然為真。如果你想要條件「二選一」,請使用 XOR!
4. 字串處理操作
字串(string)就是一連串的字元(例如 "Hello World")。你需要知道如何處理它們:
- 長度(Length):計算字串中有多少字元。
- 位置(Position):找出特定字元位於哪裡。
- 子字串(Substring):擷取字串的一部分(例如,從 "Golden" 中取出 "Gold")。
- 串接(Concatenation):將兩個字串接在一起(例如,"Foot" + "ball" = "Football")。
- 字元轉編碼(Character to Code):找出字元的數值編碼(如 ASCII)。
- 編碼轉字元(Code to Character):將數值編碼轉回字元。
類型轉換(Casting)
通常你需要變更資料類型才能進行運算。例如,如果你從使用者那裡得到 "10",它是一個字串,你必須先將它轉換成整數(integer),才能進行數學加法!
5. 進階控制結構
迭代(迴圈)
重複執行程式碼有兩種主要方式:
- 確定性迭代(Definite Iteration):你知道確切要重複多少次(例如:FOR 迴圈)。
- 不確定性迭代(Indefinite Iteration):重複執行直到某個條件改變為止(例如:WHILE 迴圈)。
巢狀結構
你可以將一個選擇結構放在另一個裡面(巢狀選擇),或是一個迴圈放在另一個裡面(巢狀迭代)。
類比:想像一個時鐘。分針每轉動 60 次(內層迴圈),時針才前進 1 次(外層迴圈)。
異常處理(Exception Handling)
有時候程式會發生錯誤(例如嘗試除以零)。異常處理允許你的程式「捕捉」這些錯誤並優雅地解決它,而不是直接崩潰。
6. 子程式與作用域
子程式(subroutine)是你主程式中的一個具名「小程式」。
優點:程式碼更易讀,不需要重複編寫相同的邏輯,且更容易測試。
參數與返回值
- 參數(Parameters):傳遞進入子程式的資料,供其運算使用。
- 返回值(Return Values):子程式將運算結果回傳給主程式。
全域變數 vs. 區域變數
- 全域變數(Global Variables):可以在整個程式的任何地方存取。
- 區域變數(Local Variables):僅存在於建立它的特定子程式內部。
你知道嗎?使用區域變數是更良好的實踐。這可以防止子程式意外更動到程式其他地方不該碰到的資料!
堆疊框架(Stack Frames)
當電腦呼叫子程式時,它會使用堆疊框架來追蹤各種狀態。它會儲存:
1. 返回位址(return address)(子程式結束後要回到哪裡)。
2. 傳遞給它的參數。
3. 子程式內部使用的區域變數。
重點回顧
- 程序化程式設計包含序列、選擇與迭代。
- DIV 用於整數商;MOD 用於餘數。
- 布林運算順序:先 NOT,再 AND,最後 OR。
- 子程式有助於整理程式碼;區域變數能確保安全。
- 堆疊框架是電腦用來記錄「呼叫子程式前所在位置」的方法。