歡迎來到程式設計的世界!
歡迎來到計算機科學中最令人興奮的領域之一:程式設計概念(Programming Concepts)。你可以把這一章想像成你的「工具箱」。就像建築工人需要錘子、釘子和藍圖來蓋房子一樣,程式設計師需要變數、迴圈和邏輯來開發軟體。我們將重點討論程序式程式設計(Procedural Programming),這其實就是將程式碼編寫成一系列指令,讓電腦按步驟執行。如果這聽起來像是學習一種新語言,請別擔心——讀完這些筆記後,你將能流利地說「電腦語言」!
1. 基礎:儲存與使用數據
在進行任何複雜的操作之前,我們需要知道如何處理資訊。
變數宣告與賦值
想像一個變數(variable)就像你房間裡的一個實體盒子。你在盒子上貼上標籤(即識別碼/identifier),這樣你就知道裡面裝了什麼,並且可以在裡面儲存一個數值。
- 變數宣告(Variable Declaration):告訴電腦:「我需要一個名為 'Score' 的盒子來裝數字。」
- 賦值(Assignment):將東西放進盒子裡。例如:Score = 10。
有意義的識別碼
你可以把變數命名為 x,但 user_age 會好得多。為什麼呢?因為如果你在六個月後回頭看你的程式碼,你會清楚知道 user_age 的作用!使用有意義的識別碼能讓你的程式碼更具可讀性,也更容易進行除錯。
輸入與輸出
程式需要與使用者進行交流!
- 輸出(Output):在螢幕上顯示資訊(例如:「遊戲結束!」)。
- 輸入(Input):從使用者獲取資訊(例如:詢問使用者的名字)。
註解:給人類看的筆記
註解(Comments)是電腦會完全忽略的文字行。我們用它來解釋一段複雜的程式碼在做什麼,就像為自己或團隊成員留下便利貼一樣。
小貼士:在許多程式語言中,註解以 # 或 // 開頭。
重點總結:變數是貼了標籤的數據儲存盒,而清晰的命名加上有用的註解能讓你的程式碼對「人類」更友善。
2. 數學與邏輯工具
電腦本質上是超高速的計算機。為了發揮這種能力,我們需要使用運算子(operators)。
算術運算
大多數運算你在數學課都學過,但在程式設計中有幾個比較特別:
- 加法 (+)、減法 (-)、乘法 (*)。
- 實數/浮點數除法 (Real/Float Division, /):標準除法,會得出小數(例如:\( 7 / 2 = 3.5 \))。
- 整數除法 (Integer Division, DIV):告訴你一個數可以整除多少次(例如:\( 7 \text{ DIV } 2 = 3 \))。
- 餘數 (Remainder, MOD):告訴你剩下的數值是多少(例如:\( 7 \text{ MOD } 2 = 1 \))。
- 冪運算(Exponentiation):將數字進行次方運算(例如:\( 3^2 = 9 \))。
- 四捨五入 vs. 截斷(Rounding vs. Truncation):四捨五入會找最接近的整數。截斷則直接去掉小數部分,不進行進位(例如:3.9 變成 3)。
關係運算
這些用於比較兩個事物。結果永遠是真 (True) 或 假 (False)。
- 等於 (==) 與 不等於 (!=)
- 小於 (<) 與 大於 (>)
- 小於或等於 (<=) 與 大於或等於 (>=)
布林運算(邏輯)
這是電腦做決定的方式。你需要知道運算優先次序(Order of Precedence)(哪個先執行):
1. NOT (最高 - 反轉值:NOT True = False)
2. AND (僅在兩邊皆為 True 時才為 True)
3. OR (最低 - 只要其中一邊為 True 就為 True)
- XOR:「互斥或」的縮寫。僅在兩邊恰好有一邊為 True 時才為 True(若兩邊都為 True 則為 False!)。
記憶小竅門:記住 N.A.O. (NOT,然後 AND,最後 OR) 來確保你的邏輯順序正確!
重點總結:DIV 給出「整數」商,MOD 給出「餘數」,而布林邏輯 (NOT, AND, OR) 是你程式的大腦。
3. 控制流程:選擇與迭代
程式並不總是直線運行的。有時候它需要選擇路徑或重複執行某個任務。
選擇(If 語句)
這允許程式在不同的路徑中做出選擇。如果是下雨,就帶雨傘;否則,戴太陽眼鏡。
巢狀選擇(Nested Selection)是指在一個「if」語句中再包含另一個「if」語句。想像一個決策樹:首先檢查使用者是否已登入。如果是,則再檢查他們是否為管理員。
迭代(迴圈)
迭代是一個表示「重複」的專業術語。有兩種類型:
- 定數迭代(FOR 迴圈):當你知道精確重複次數時使用(例如:「跑 10 圈」)。
- 不定數迭代(WHILE 迴圈):當你需要重複執行直到某個條件改變時使用(例如:「一直跑,直到累了為止」)。
你知道嗎?巢狀迭代是迴圈中的迴圈。想像時鐘:「分鐘」迴圈必須轉滿 60 次,「小時」迴圈才會移動一次。
重點總結:選擇用於做出抉擇;迭代用於重複任務。當你知道次數時使用「For」,不知道時使用「While」。
4. 字串處理與轉換
字串(string)就是一連串的字元(例如 "Hello World")。我們可以用幾種方式操作它們:
- 長度(Length):計算字元數(包含空白鍵!)。
- 位置(Position):找出字元所在位置。警告:大多數程式語言從 0 開始計數!
- 子字串(Substring):從字串中擷取一段(例如:從 "Golden" 中取出 "Gold")。
- 串接(Concatenation):將兩個字串連接在一起(例如:"Apple" + "Pie" = "ApplePie")。
型別轉換(Casting)
有時候數字 "5" 是以字串形式存在的,但你需要將它轉為整數(Integer)才能進行數學計算。將數據從一種型別轉換為另一種的過程稱為轉型(casting)。你必須熟悉在字串、整數、浮點數和日期之間進行轉換。
重點總結:字串是文字。記得電腦通常從 0 而不是 1 開始計算位置!
5. 副程式與作用域
隨著程式變大,結構會變得混亂。副程式(Subroutines,也稱為函數或程序)能幫助我們保持整潔。
什麼是副程式?
副程式是一個有名稱的程式碼區塊,用於執行特定任務。與其將相同的 20 行程式碼重複寫五次,不如在副程式中寫一次,然後在需要時「呼叫」它的名稱即可。
參數與回傳值
- 參數(Parameters):你「傳入」副程式以供其執行任務的資訊。
- 回傳值(Return Values):副程式執行完畢後送回主程式的結果。
區域變數 vs. 全域變數
- 全域變數(Global Variables):它們存在於外部,可以被整個程式看到或使用。它們就像公園一樣是公共的。
- 區域變數(Local Variables):它們僅存在於特定的副程式內。一旦副程式結束,這些變數就會被刪除。它們就像你的私人臥室。
專家提示:儘可能使用區域變數,以避免意外的臭蟲!
堆疊框架(Stack Frame)
當呼叫副程式時,電腦會使用堆疊框架來追蹤:
1. 回傳位址(Return Address)(執行完畢後回到主程式的哪個位置)。
2. 正在使用的參數。
3. 該特定呼叫所使用的區域變數。
重點總結:副程式是保持程式碼整潔的小型程式。區域變數更安全,因為它們被收納在副程式內部。
6. 處理異常情況
無論你是多優秀的程式設計師,總會出錯。使用者可能會在預期輸入數字時輸入了文字,或者檔案可能會遺失。
異常處理(Exception Handling)
我們使用異常處理來避免程式直接「崩潰」。這就像安全網一樣。我們告訴電腦:「嘗試執行此任務,但如果發生錯誤(異常),請執行另一項動作,而不是直接崩潰。」
隨機數生成
有時候我們希望電腦不可預測,就像遊戲中擲骰子一樣。大多數語言都有內建的隨機數生成(Random Number Generation)工具。你可以利用它為你的程式增添變化。
快速回顧:
- DIV/MOD:整數除法 vs. 餘數。
- 布林優先級:NOT -> AND -> OR。
- 迭代:"For" (已知次數) vs. "While" (未知次數)。
- 作用域:區域 (內部) vs. 全域 (外部)。
- 異常處理:程式的安全網。
如果這聽起來要記的東西很多,請不要擔心。程式設計是一項實踐技能——你在實際程式碼中練習這些結構越多,它們就會感覺越自然。祝你編程愉快!