讓我們一起來談談編程!

大家好!歡迎來到精彩的編程世界。即使你從未寫過一行程式碼,也請不用擔心。把編程想像成學習一種新語言,用來與電腦溝通。你不再說「請」,而是使用特定的指令來確切地告訴電腦該做什麼。

在本章中,我們將學習如何像解難者一樣思考、規劃解決方案、編寫電腦指令,甚至找出並修正錯誤。這是一項超有用的技能,不只適用於資訊及通訊科技科,更能應用於解決現實生活中各種各樣的問題。讓我們開始吧!



1. 從問題到計劃:先思考,後編碼

在你告訴電腦該做什麼之前,你需要一個清晰的計劃。優秀的程式員花在思考和規劃上的時間,比輸入程式碼的時間更多。這個規劃階段稱為運算思維 (Computational Thinking)

a. 理解問題

第一步始終是理解你需要達成什麼目標。

我們將其分為三個部分:

輸入 (Input):程式開始時需要什麼資訊?(例如:要相加的兩個數字)
處理 (Process):程式需要採取哪些步驟?(例如:相加數字的動作)
輸出 (Output):程式最終應顯示什麼結果?(例如:兩個數字的總和)

想像你正在煮即食麵。
輸入:麵、熱水、調味包。
處理:1. 打開蓋子。2. 加入調味料。3. 倒水。4. 等待3分鐘。
輸出:一碗美味的麵條!

有時候,一個問題可能太大。所以我們使用拆解問題 (decomposition) — 將大問題分解成更小、更易於管理的小問題。解決許多小問題,遠比解決一個巨大問題要容易得多。

b. 設計演算法

演算法 (algorithm) 只是解決問題的一系列步驟說明,一個比較專業的術語。它是你給電腦的「食譜」。在我們編寫程式碼之前,有兩種常用方法來記錄我們的演算法。

虛擬碼

虛擬碼 (Pseudocode) 意指「假的程式碼」。這是一種使用簡單英語來寫出演算法的方式,但其結構看起來有點像真實的程式編寫。它沒有嚴格的規則,但能幫助你組織思緒。

例子:找出兩個數字平均值的演算法。
1. 從使用者取得第一個數字(我們稱之為 Num1)。
2. 從使用者取得第二個數字(我們稱之為 Num2)。
3. 將 Num1 和 Num2 相加來計算總和 (Sum)。
4. 將總和 (Sum) 除以 2 來計算平均值 (Average)。
5. 向使用者顯示平均值 (Average)。

程式流程圖

流程圖 (flowchart) 是一種使用標準符號來表示演算法的視覺化方法。它幫助你「看見」程式的流程。

常用符號:

橢圓形 (終止符):用於表示「開始」和「結束」點。
平行四邊形 (輸入/輸出):用於獲取輸入或顯示輸出。
矩形 (處理):用於計算或賦值等動作。
菱形 (判斷):當程式需要做出選擇時使用(例如:IF 語句)。它總是會有兩個輸出路徑:「是」和「否」。
箭頭 (流程線):顯示程式流程的方向。

乾跑與追蹤表

你如何知道你的演算法是否有效,甚至不用編寫程式碼?你可以假裝自己是電腦!這稱為乾跑 (dry run)

追蹤表 (trace table) 幫助你記錄演算法每一步驟中變數的值。這是找出邏輯錯誤的一項重要技能。

重點提示:在編寫任何實際程式碼之前,請務必使用虛擬碼或流程圖等工具來規劃你的解決方案。一個好的計劃能為你節省大量時間!




2. 程式的基石:變數、資料與運算子

程式與資料協同運作。為了處理資料,我們需要將它儲存在某處並給予一個名稱。這就是變數和常數發揮作用的地方。

a. 變數與常數

變數 (variable) 就像一個有標籤的盒子,你可以將資訊儲存在裡面。盒子裡的資訊可以隨時改變。例子:`userScore`(使用者分數)、`age`(年齡)、`name`(姓名)。

常數 (constant) 是一個內容設定一次後就永遠不能更改的盒子。例子:`PI = 3.14159`(圓周率π)、`MAX_ATTEMPTS = 3`(最大嘗試次數)。

b. 資料類型

電腦需要知道你正在儲存的是哪資料。這稱為資料類型 (data type)

整數 (Integer):儲存整數。(例如:10, 0, -99)
實數 / 浮點數 (Real / Float):儲存帶有小數點的數字。(例如:98.6, 3.14, -0.05)
字元 (Character):儲存單個字母、數字或符號。(例如:'A', '7', '$')
字串 (String):儲存一串字元(文字)。(例如:「Hello World」、「陳先生」)
布林值 (Boolean):只能有兩個值:真 (True)假 (False)。它就像一個電燈開關:開或關。

快速回顧:選擇資料類型
你的年齡? -> 整數
一杯飲料的價格? -> 實數
你的成績(A, B, C)? -> 字元
你的名字? -> 字串
門是開著的嗎? -> 布林值

c. 簡單資料結構:陣列

陣列 (array)(或列表)是相同資料類型的項目集合,它們儲存在一起。把它想像成一排儲物櫃或一個雞蛋紙盒。每個「儲物櫃」都有一個索引號碼,以便你可以直接存取它。

例子:一個名為 `scores` 的陣列,用來儲存5位學生的測驗分數。
`scores` = [85, 92, 78, 66, 95]

要取得第二位學生的分數,你可能會使用 `scores[1]` (在許多程式語言中,索引是從0開始的!)。

d. 運算子:動作詞

運算子是用於對資料執行操作的符號。

算術運算子 (Arithmetic Operators):用於數學運算!`+`(加)、`-`(減)、`*`(乘)、`/`(除),以及 `mod`(取模運算,返回除法的餘數。例如:10 mod 3 的結果是 1)。

關係運算子 (Relational Operators):用於比較事物。它們的結果總是一個布林值(真/假)。
`==`(等於)、`!=` 或 `<>`(不等於)、`>`(大於)、`<`(小於)、`>=`(大於或等於)、`<=`(小於或等於)。

布林 (邏輯) 運算子 (Boolean (Logical) Operators):用於組合真/假條件。
AND(與):兩個條件都必須為真。(例如:`age > 18 AND hasTicket == True`)
OR(或):至少一個條件必須為真。(例如:`day ==