歡迎來到程式設計的世界!
你好!無論你是編碼高手還是剛起步的初學者,這一章都是電腦科學的「引擎室」。程式設計的本質,就是給電腦一套指令來解決問題。這就像寫食譜一樣:只要正確地遵循步驟,你就能做出美味的蛋糕(在我們的例子中,就是一個運作順暢的應用程式!)。
如果起初覺得內容有點多,請不用擔心。我們會將其拆解成容易消化的小單元,讓你順利掌握 AQA A Level Computer Science (7517) 課程的核心基礎。讓我們開始吧!
1. 建構基礎:資料型態 (Data Types)
在編寫程式碼之前,我們需要了解我們正在處理的資料種類。想像一個倉庫,你將物品存放在不同類型的箱子裡。你肯定不會把液體裝進紙箱裡,對吧?資料型態就像那些專用的箱子。
常見資料型態
- 整數 (Integer): 整數(例如:7, -12, 100)。不允許有小數點!
- 實數/浮點數 (Real/Float): 帶有小數點的數字(例如:3.14, -0.01)。
- 布林值 (Boolean): 只有 True(真) 或 False(假)。就像電燈開關一樣。
- 字元 (Character): 單一字母、數字或符號(例如:'A', '$', '4')。
- 字串 (String): 一串字元的集合。通常是文字(例如:"Hello World")。
- 日期/時間 (Date/Time): 專門用於日曆日期和時鐘時間。
- 指標/參考 (Pointer/Reference): 這儲存了物件所在的 記憶體位址。它不儲存資料本身,而是告訴電腦去哪裡找到資料。
- 陣列 (Arrays): 將相同資料型態的項目存放在同一個名稱下的集合。
- 紀錄 (Records): 相關資料的集合,可以包含不同類型(例如:一個學生紀錄包含姓名、年齡和學號)。
使用者自定義資料型態
有時候內建的類型不足以應付需求。你可以建立屬於自己的類型!這稱為 使用者自定義資料型態 (User-defined data type)。例如,你可以建立一個儲存兩個整數 \( x \) 和 \( y \) 的「點 (Point)」類型。
快速回顧: 選擇正確的資料型態很重要,因為它會告訴電腦需要分配多少記憶體,以及可以執行哪些運算(例如:你無法將兩個字串相乘!)。
2. 程式設計概念與控制結構
程式是如何從頭到尾運作的呢?主要有三個核心原則:順序 (Sequence)、選擇 (Selection) 和 迭代 (Iteration)。
基本概念
- 變數宣告 (Variable Declaration): 告訴電腦:「我需要一個名為 score 的箱子來存放整數。」
- 常數宣告 (Constant Declaration): 就像變數,但在程式執行期間,其值 不能改變(例如:PI = 3.14)。
- 賦值 (Assignment): 使用 = 符號將數值放入變數中(例如:score = 10)。
選擇 (Selection) - 決策制定
這就是程式「思考」的方式。我們使用 IF 語句或 Switch/Case 語句。
範例:IF score > 50 THEN "你及格了!" ELSE "再試一次!"
迭代 (Iteration) - 迴圈
迭代只是「重複執行程式碼」的專業術語。主要分為兩種類型:
- 確定迭代 (Definite Iteration): 你精確知道迴圈會執行多少次(例如:FOR 迴圈)。
- 不確定迭代 (Indefinite Iteration): 程式會持續執行直到達成特定條件為止(例如:WHILE 或 REPEAT UNTIL 迴圈)。
常見錯誤: 在 WHILE 迴圈中,條件是在 開始時 檢查的。如果條件一開始就是假的,內部的程式碼可能 永遠不會 執行!而在 REPEAT UNTIL 迴圈中,程式碼至少會執行一次,因為檢查是在 結束時 進行的。
3. 算術與邏輯運算
程式設計涉及一些數學,但不用驚慌!主要都是基礎運算。
算術運算
- 加法 (+), 減法 (-), 乘法 (*)
- 實數/浮點數除法 (/): 標準除法(例如:\( 5 / 2 = 2.5 \))。
- 整數除法: 這會給出整數部分和餘數。
- DIV: 商數(例如:\( 7 \text{ DIV } 2 = 3 \))。
- MOD: 餘數(例如:\( 7 \text{ MOD } 2 = 1 \))。
- 指數 (Exponentiation): 乘冪運算(例如:\( 2^3 = 8 \))。
- 四捨五入 vs. 截斷 (Rounding vs. Truncation): 四捨五入會進位到最接近的整數;截斷則直接「切掉」小數部分。
關係與邏輯運算
關係運算子用於比較:=(等於)、!= 或 <>(不等於)、<(小於)、>(大於)。
邏輯運算子用於組合條件:
- AND: 兩者都必須為真。
- OR: 至少一個必須為真。
- NOT: 反轉數值(真變為假)。
- XOR: 異或 (Exclusive OR)。兩者只能擇其一。如果兩者都為真,XOR 的結果為假!
4. 字串處理
可以把 字串 (String) 想像成一串項鍊,每一顆珠子就是一個 字元 (Character)。我們可以對字串進行操作:
- 長度 (Length): 有多少個字元?("Cat" 是 3)。
- 位置 (Position): 尋找字母在哪裡(記住,許多程式語言是從 0 開始計數的!)。
- 子字串 (Substring): 截取字串的一部份。
- 串接 (Concatenation): 將兩個字串接在一起(例如:"Fire" + "fly" = "Firefly")。
你知道嗎? 電腦其實不懂字母;它們使用的是 字元編碼 (Character Codes)(如 ASCII 或 Unicode)。你可以將 'A' 這樣的字元轉換成其對應的編碼 (65),並反向轉換回去!
5. 副程式 (Subroutines: Procedures and Functions)
副程式 是一段有名稱的程式碼區塊,負責執行特定任務。與其重複寫同樣的程式碼 10 次,不如把它寫成副程式,在需要時「呼叫 (call)」它。
程序 (Procedures) 與函式 (Functions)
- 程序 (Procedures): 執行任務,但不一定會回傳數值。
- 函式 (Functions): 必須 回傳一個值回程式的主體。
參數與作用域
參數 (Parameters): 這些是傳入副程式的資料,以便讓它進行處理(就像你給廚師的食材)。
區域變數 (Local Variables): 這些僅存在於 副程式內部。一旦副程式執行完畢,它們就會被刪除。這是一個「良好的習慣」,因為它可以防止程式的不同部分意外地更改彼此的資料。
全域變數 (Global Variables): 可以在程式的 任何地方 被存取。請謹慎使用!
重點摘要: 使用副程式能讓你的程式碼更易於閱讀、測試和重複使用。這就像將一個大專案拆解成細小、易於管理的工作。
6. 堆疊 (Stack) 與遞迴 (Recursion)
這是一個進階主題,如果一時無法理解也別擔心!
堆疊框架 (Stack Frames)
當程式呼叫副程式時,它需要記住自己之前執行到哪裡,以便結束後返回。它使用 堆疊框架 (Stack Frame) 來儲存:
- 返回位址 (Return Address): 結束後該回到哪裡。
- 參數 (Parameters): 傳入的數值。
- 區域變數 (Local Variables): 該呼叫專有的資料。
遞迴 (Recursion)
遞迴 是指副程式呼叫 它自己本身。
想像一下站在兩面鏡子中間——影像會無限重複。在程式碼中,我們使用 終止條件 (Base Case) 來防止這種無限迴圈。
- 終止條件 (Base Case): 停止遞迴的條件。
- 遞迴步驟 (General Case): 函式再次呼叫自身的部分。
類比:要找出堆疊箱子的底部,如果你不在底部(終止條件),就去看看下面的箱子(遞迴呼叫)。
快速回顧:
1. 順序 (Sequence): 程式碼按順序執行。
2. 選擇 (Selection): IF/ELSE 決策。
3. 迭代 (Iteration): 迴圈 (For/While)。
4. 副程式 (Subroutines): 可重複使用的區塊。
5. 區域變數 (Local Variables): 比全域變數更安全。
恭喜你讀完了程式設計基礎筆記!休息一下,嘗試用你喜歡的語言寫一個簡單的迴圈吧。請記住:每一位專業的程式設計師都是從你現在的位置開始的。繼續編碼吧!