歡迎來到程式設計概念!
各位未來的電腦科學家,你們好!本章節是你們學習程式設計的一切基礎。你可以把程式設計概念想像成與電腦溝通所需的文法和詞彙。一旦你掌握了這些基本概念——如何儲存資訊以及如何控制指令流程——你就能編寫出任何想像得到的程式!
如果起初覺得有些棘手,也不用擔心。我們將會運用現實生活中的例子,將每一個概念拆解成簡單且容易理解的部分。
1. 建構基礎:資料與儲存
1.1 資料型別 (Data Types)
電腦必須準確知道它正在儲存哪種資訊。你儲存的是整數、文字,還是單純的「對/錯」陳述?這就是為什麼我們要使用資料型別 (Data Types)。使用正確的型別能幫助電腦更有效地管理記憶體。
比喻:你可以把資料型別想像成廚房裡不同的容器。你總不會把麵粉裝在一個小小的香料罐裡吧!
- 整數 (Integer/INT):儲存整數(正數或負數)。
例如:5, -100, 42 - 實數 / 浮點數 (Real / Float):儲存帶有小數點的數字。
例如:3.14, 99.9, -0.5 - 字元 / 字串 (Character / String/STR):儲存文字、字母、符號,甚至是視為文字的數字(例如電話號碼)。字串通常是一連串的字元。
例如:"Hello World", "A", "123 Main Street" - 布林值 (Boolean/BOOL):僅儲存兩個值:TRUE (真) 或 FALSE (假)。這對於進行邏輯判斷非常重要。
例如:燈亮著嗎?(TRUE/FALSE)
快速複習:如果數字需要小數點,請使用實數 (Real)。如果是文字(即使文字中包含數字),請使用字串 (String)。如果只是 1 或 0(或是真/假),則使用布林值 (Boolean)。
1.2 變數與常數
為了在程式中使用資料,我們需要將其儲存在電腦的記憶體中。我們使用特定的名稱來標記這些儲存位置。
變數 (Variables)
變數 (Variable) 是一個已命名的記憶體位置,用於儲存程式執行期間可以改變的資料。
- 比喻:變數就像一個貼了標籤的盒子,你可以不斷地往裡面放入不同的東西。
- 例子:一個名為 Score (分數) 的變數,初始值可能為 0,並在使用者每次答對時增加。
常數 (Constants)
常數 (Constant) 是一個已命名的記憶體位置,用於儲存程式執行期間不得改變的資料。
- 比喻:常數就像一個貼了標籤且在放入第一個物品後就被封死的盒子。
- 例子:圓周率 Pi (\(3.14159\)) 的值或固定的稅率。
為什麼要使用常數? 如果你使用像 TAX_RATE (稅率) 這樣的常數,而之後需要更改稅率,你只需要在一個地方(程式開頭)修改該值,這會讓程式維護變得輕鬆得多。
1.3 指派 (Assignment)
指派 (Assignment) 是將數值賦予變數(或常數)的過程。在程式偽代碼 (Pseudocode) 中,我們常使用箭頭符號 (\(\leftarrow\)) 或等號 (\(=\))。
核心概念:當我們進行指派時,我們實際上是在說:「左邊的項目取得右邊項目的值。」
指派例子:
Username \(\leftarrow\) "AQAStudent"
Age \(=\) 16
NewScore \(\leftarrow\) OldScore \(+\) 10
常見錯誤提醒!
在程式設計中,這行程式碼 Count \(\leftarrow\) Count \(+\) 1 並不代表 Count 等於 Count 加 1(這在數學上是不可能的)。它的意思是:取得 Count 目前的值,加上 1,然後將新的結果放回 Count 變數中。
第 1 部分重點總結:變數用於儲存會改變的資料,常數用於儲存不會改變的資料,而資料型別則告訴電腦正在儲存什麼樣的資料。
2. 控制流程:序列、選擇與迭代
程式只是一組指令的集合。我們建構這些指令的三種主要方式稱為三大基本程式設計結構。
2.1 序列 (Sequence)
序列 (Sequence) 指的是指令會按照撰寫的先後順序,從上到下逐一執行。
- 比喻:按照食譜步驟操作:1. 混合材料。2. 倒入烤盤。3. 烘烤 30 分鐘。
這是最簡單的程式執行流程。
2.2 選擇 (Selection - 進行決策)
選擇 (Selection)(或稱分支)允許程式根據條件(通常是布林表達式)在兩條或多條路徑中進行選擇。
IF...THEN...ELSE...
這是進行決策最常見的方式。
IF Condition (條件) IS TRUE THEN
執行這些指令 (路徑 A)
ELSE
執行這些指令 (路徑 B)
ENDIF
例子: IF Temperature \(<\) 0 THEN 輸出 "穿上外套" ELSE 輸出 "天氣夠暖了"。
你知道嗎? 你可以只用 IF...THEN 而不帶 ELSE。如果條件為 FALSE,程式只需跳過該區塊內的指令並繼續執行即可。
CASE / Switch 敘述
當你需要根據單一變數的值,從多個固定的選項中做出選擇時,就會使用 CASE(或 Switch)結構。
CASE OF Grade (成績)
A: 輸出 "優異"
B: 輸出 "良好"
OTHERWISE: 輸出 "繼續努力"
ENDCASE
在處理多個固定選擇時,這種寫法比寫一大堆嵌套的 IF 敘述要簡潔得多。
2.3 迭代 (Iteration - 重複動作 / 迴圈)
迭代 (Iteration)(或稱迴圈)允許程式將一段程式碼重複執行多次。這讓我們不必一遍又一遍地編寫相同的程式碼。
FOR 迴圈 (計數控制)
當你知道迴圈需要精確執行多少次時使用。
FOR Counter (計數器) \(\leftarrow\) 開始值 TO 結束值 DO
要重複的指令
NEXT Counter
例子: FOR i \(\leftarrow\) 1 TO 10 DO - 這個迴圈將會精確執行 10 次。
WHILE 迴圈 (條件控制 - 先檢查後執行)
當你不知道迴圈會執行多少次,但需要在執行迴圈內的程式碼之前檢查條件時使用。
WHILE Condition (條件) IS TRUE DO
要重複的指令
ENDWHILE
重要提醒:如果條件在最一開始就為 FALSE,WHILE 迴圈內的程式碼將永遠不會執行。
REPEAT UNTIL 迴圈 (條件控制 - 先執行後檢查)
當你不知道迴圈會執行多少次,但需要迴圈內的程式碼至少執行一次時使用。
REPEAT
要重複的指令
UNTIL Condition (條件) IS TRUE
記憶技巧:
WHILE:在頂部檢查條件,你要「看好 (Watch out)」條件。
REPEAT UNTIL:你會先「執行 (Running)」程式碼,再在底部進行檢查。
第 2 部分重點總結:序列是按部就班;選擇 (IF/CASE) 是用來選擇路徑;迭代 (迴圈) 是用來重複程式碼。
3. 邏輯與運算
程式透過使用運算子來計算及比較資料來運作。
3.1 算術運算子 (Arithmetic Operators)
這些運算子執行數學計算。
- \(+\):加法
- \(-\):減法
- \(*\):乘法
- \(/\):除法(結果為實數/浮點數)
整數專用運算子:
- DIV (整數除法):給出除法的整數結果,捨棄餘數。
例子:10 DIV 3 \(= 3\) - MOD (取餘數):給出整數除法後的餘數。
例子:10 MOD 3 \(= 1\)(因為 10 除以 3 等於 3,餘 1)
MOD 有什麼用? 它非常適合用來檢查數字是奇數還是偶數(如果數字 MOD 2 \(= 0\),則為偶數),或者用於在列表中進行循環切換。
3.2 比較 (關係) 運算子
這些運算子用於比較兩個數值,結果永遠是布林值(TRUE 或 FALSE)。它們對於選擇和迭代至關重要。
- \(==\) 或 \(=\):等於
- \(<\):小於
- \(>\):大於
- \(<=\):小於或等於
- \(>=\):大於或等於
- \(<>\) 或 \(!=\):不等於
例子: IF UserAge \(>=\) 18 THEN...(此條件會評估為 TRUE 或 FALSE)。
3.3 布林 (邏輯) 運算子
這些運算子組合多個布林結果 (TRUE/FALSE),以建立更複雜的條件。
AND (且)
只有當所有由 AND 連接的部分皆為 TRUE 時,整個條件才為 TRUE。
例子: 如果 (你有票 AND 你年滿 18 歲),你才能進入派對。
OR (或)
只要由 OR 連接的條件中,至少有一個部分為 TRUE,整個條件就為 TRUE。
例子: 如果 (你的考試成績為 A OR 你的課業成績為 A),你就能通過這門課。
NOT (非)
反轉布林值(TRUE 變為 FALSE,FALSE 變為 TRUE)。
例子: IF NOT (IsRaining) THEN 輸出 "出去玩"
第 3 部分重點總結:算術運算子負責計算;比較運算子負責提問(結果為 TRUE/FALSE);布林運算子則負責組合這些問題。
4. 輸入與輸出 (I/O)
要讓程式有用,它必須與使用者或外界互動。這是透過輸入 (Input) 和輸出 (Output) 來完成的。
輸入 (Input)
輸入是程式從外界接收到的資料(通常來自使用者的鍵盤、滑鼠或感應器)。
在偽代碼中,我們常用關鍵字 INPUT 或 READ。
例子: INPUT UserName(程式會暫停並等待使用者輸入,輸入的資料會儲存在變數 UserName 中)。
輸出 (Output)
輸出是程式傳送給外界的資料(通常顯示在螢幕上、列印出來或儲存到檔案中)。
在偽代碼中,我們常用關鍵字 OUTPUT 或 PRINT。
例子: OUTPUT "歡迎, " + UserName(程式會在螢幕上顯示問候語以及儲存的使用者名稱)。
快速複習方塊:I/O
輸入 (INPUT):資料進入電腦。
輸出 (OUTPUT):資料從電腦送出。
總結檢查清單:程式設計精華
如果你理解這些概念,你就已經具備了扎實的程式設計基礎:
- 我知道整數、實數、字串和布林資料型別之間的區別。
- 我能解釋為什麼使用變數而非常數。
- 我理解指派的意思是設定變數的值。
- 我能描述序列、選擇和迭代之間的差異。
- 我知道 IF...THEN...ELSE 和 CASE 都是選擇結構的形式。
- 我知道何時該使用 FOR 迴圈(計數)與 WHILE/REPEAT 迴圈(條件控制)。
- 我知道 MOD 會給出餘數,而 DIV 會給出整數除法結果。
- 我能運用 AND、OR 和 NOT 來建立複雜的布林條件。