算法設計(一)

算法 → 偽代碼 → 變量/賦值/運算算式/數據類型 → 選擇結構 → 循環結構,一步一步建立基礎。

2.1 算法(Algorithm)與空運行(Dry run)

以烹調食物、使用說明書等作例子:一份清楚、按次序寫好的指示,就是一個 算法

2.1A 偽代碼與流程圖

偽代碼(pseudocode)

偽代碼是接近自然語言的描述方式,用簡短句子寫出每一步的動作,方便討論算法,不受任何程式語言限制。

輸入 數值 n
sum ← 0
i ← 1
當 i <= n
    sum ← sum + i
    i ← i + 1
輸出 sum

建議學生先用偽代碼設計,再把邏輯轉寫成實際程式語言。

流程圖(flowchart)

流程圖用不同圖形(開始/結束、處理、判斷、輸入輸出等)配合箭嘴,顯示控制流程。

2.1B 變量(Variable)與賦值(Assignment)

甚麼是變量?

變量可以想像成記憶體中的一個有標籤的盒子:盒子內儲存數據,盒子上寫上名稱。 在運算過程中可以讀取更新盒子內的值。

命名規則

  • 只可以使用英文字母、數字及底線 _
  • 名稱的第一個字元不能是數字(例如 1number 不可)。
  • 不能包含空格或標點(例如 new numberprice$ 不可)。
  • 在同一個程式之中,每一個變量名稱必須唯一

變量名稱應反映用途,例如 weighttotal_mark,避免全部只用 AB 等。

常數(Constant)

有些值在程式中不會改變,例如圓周率 3.14159。可以用全大寫的變量名稱代表,例如 PI

可以提醒學生:在程式中修改常數是非常不良的習慣,實際程式語言一般會以語法保護常數。

2.1B 變量名稱規則練習

按「下一題」由題庫隨機抽一個變量名稱,然後判斷是否合法。

請按「下一題」開始。
得分:0 / 0

賦值:把數據放入變量

偽代碼通常使用箭嘴 表示「把右邊的值放入左邊的變量」。

輸入 price
price ← 8000          # 把 8000 放入 price

new_price ← price     # 把 price 的值複製到 new_price

需強調:賦值會覆蓋原來的值,並不是數學上「左右兩邊永遠相等」的意思。

2.1C 運算算式(Arithmetic expression)

除了把固定值放入變量外,也可以把運算算式的結果儲存在變量中。 算式可以由數字、變量、常數和數學運算符組成。

常見數學運算符

運算符 意義 例子
+ 加法 total ← a + b
- 減法 diff ← x - y
* 乘法 area ← length * width
/ 除法 avg ← total / 5
// 整數除法 avg ← total // 5
avg ← total / 5 的整數部份
% 餘數除法 avg ← total % 5
avg ← total MOD 5

可以在課堂上配合代入數值,讓學生練習由右至左計算,再寫出存入變量後的新值。

2.1C 偽代碼運算練習

題目會給出 x、y 的初始值及程式碼,請計算運算後 x 和 y 的最終值。

請按「下一題」開始。
得分:0 / 0

2.1D 數據類型(Data type)

為了有效運用記憶體及進行運算,程式需要知道每一份數據的類型。常見的基本類型包括:

2.1D 數據類型練習

系統會顯示一個資料,請選擇它屬於哪一種數據類型。

請按「下一題」開始。
得分:0 / 0

2.1E 交換變量的小遊戲

交換兩個變量的數值是一個經典例子。若直接寫成 x ← yy ← x,結果兩個變量會變成相同的值。 正確做法是使用臨時變量

x
3
y
9
temp
(空)

按「下一步」觀察每一行執行後 x、y、temp 的變化,再思考為甚麼需要臨時變量。

2.2A 如果語句(if)

如果語句用來在條件成立時才執行某些陳述。條件通常是布爾算式(結果為 True 或 False)。

輸入 x
如果 x > 10
    x ← x + 1
輸出 x

注意:只有當條件 x > 10 為 True 時,縮排在「如果」之下的 x ← x + 1 才會執行。

if 語句運算練習

觀察條件是否成立,計算 if 執行後 x、y 的最終值。

請按「下一題」開始。
得分:0 / 0

2.2B 如果…否則(if…else)與縮排

如果…否則結構用於根據條件在兩組陳述之間作出二選一。 縮排是判斷哪一行屬於哪一部分的關鍵。

輸入 mark
如果 mark ≥ 50
    result ← "及格"
否則
    result ← "不及格"
輸出 result

正確的縮排方式為:如果否則 置於同一層, 而屬於它們的陳述向右縮排一層。這樣即使程式較長,也能清楚看出哪一些陳述屬於哪一個分支。

if...else 語句運算練習

留意條件為真或假時,程式執行哪一邊分支。

請按「下一題」開始。
得分:0 / 0

2.3 隨機空運行練習(只包含順序結構)

這一部分只包含變量及四則運算,沒有如果或循環。學生須在追蹤表中寫出每一行執行後各變量的值,然後由系統自動對答案。

  1. 先閱讀整段偽代碼,留意每一個變量的初始值。
  2. 由上而下逐行處理,在紙上或直接於追蹤表更新變量。
  3. 完成後按「檢查答案」,系統會標示對錯。
隨機產生的偽代碼

追蹤表(每一行執行後)

提示:只需填寫表格中出現的變量,沒有出現的變量可以留空。

2.3 迴圈結構運算練習

每題會給出一段迴圈程式碼,請計算迴圈結束後變量的最終值。

for 迴圈

請按「下一題」開始。
得分:0 / 0

while 迴圈

請按「下一題」開始。
得分:0 / 0

do...while 迴圈

請按「下一題」開始。
得分:0 / 0

repeat...until 迴圈

請按「下一題」開始。
得分:0 / 0