歡迎來到程式設計概念!

各位未來的電腦科學家,你們好!本章節是你們學習程式設計的一切基礎。你可以把程式設計概念想像成與電腦溝通所需的文法和詞彙。一旦你掌握了這些基本概念——如何儲存資訊以及如何控制指令流程——你就能編寫出任何想像得到的程式!

如果起初覺得有些棘手,也不用擔心。我們將會運用現實生活中的例子,將每一個概念拆解成簡單且容易理解的部分。


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)

輸入是程式從外界接收到的資料(通常來自使用者的鍵盤、滑鼠或感應器)。

在偽代碼中,我們常用關鍵字 INPUTREAD

例子: INPUT UserName(程式會暫停並等待使用者輸入,輸入的資料會儲存在變數 UserName 中)。

輸出 (Output)

輸出是程式傳送給外界的資料(通常顯示在螢幕上、列印出來或儲存到檔案中)。

在偽代碼中,我們常用關鍵字 OUTPUTPRINT

例子: OUTPUT "歡迎, " + UserName(程式會在螢幕上顯示問候語以及儲存的使用者名稱)。

快速複習方塊:I/O

輸入 (INPUT):資料進入電腦。
輸出 (OUTPUT):資料從電腦送出。


總結檢查清單:程式設計精華

如果你理解這些概念,你就已經具備了扎實的程式設計基礎:

  1. 我知道整數、實數、字串和布林資料型別之間的區別。
  2. 我能解釋為什麼使用變數而非常數。
  3. 我理解指派的意思是設定變數的值。
  4. 我能描述序列、選擇和迭代之間的差異。
  5. 我知道 IF...THEN...ELSE 和 CASE 都是選擇結構的形式。
  6. 我知道何時該使用 FOR 迴圈(計數)與 WHILE/REPEAT 迴圈(條件控制)。
  7. 我知道 MOD 會給出餘數,而 DIV 會給出整數除法結果。
  8. 我能運用 AND、OR 和 NOT 來建立複雜的布林條件。