跳轉至

建立 2026-11-12 更新 2026-11-12 SL HL

B1.1 計算思維

計算思維(Computational thinking)是用電腦科學家的方式分析與解決問題的思考方法,包含分解、模式辨識、抽象化與演算法設計四個核心元素。本頁說明這四個元素,以及如何用流程圖與虛擬碼表達演算法、如何用追蹤表檢查演算法是否正確。

計算思維有哪四個元素?

元素 英文 意義 例子:規劃畢業旅行
分解 Decomposition 把大問題拆成小問題 拆成交通、住宿、行程、預算
模式辨識 Pattern recognition 找出相似之處,重複利用解法 每天行程都是「早上景點、中午用餐、下午活動」
抽象化 Abstraction 保留重要細節,忽略不相關細節 地鐵圖只畫站與路線,不畫街道
演算法設計 Algorithmic design 寫出明確、有限、按順序執行的步驟 訂票步驟:比價 → 選日期 → 付款 → 確認

演算法(algorithm) 是解決問題的明確步驟,必須:有明確的輸入與輸出、每一步沒有歧義、在有限步驟內結束。

如何用流程圖表示演算法?

流程圖(flowchart)用標準符號表示步驟:橢圓為開始/結束、平行四邊形為輸入/輸出、長方形為處理、菱形為判斷。

flowchart TD
    A([開始]) --> B[/輸入分數 score/]
    B --> C{score >= 4 ?}
    C -- 是 --> D[/輸出 及格/]
    C -- 否 --> E[/輸出 不及格/]
    D --> F([結束])
    E --> F

如何寫虛擬碼?

虛擬碼(pseudocode)是不拘泥於特定語言語法、但結構清楚的演算法描述。以下找出串列中的最大值:

max ← numbers[0]
loop i from 1 to length(numbers) - 1
    if numbers[i] > max then
        max ← numbers[i]
    end if
end loop
output max

如何用追蹤表檢查演算法?

追蹤表(trace table)逐步記錄每個變數的值,用來找出邏輯錯誤或預測輸出。以 numbers = [3, 8, 2, 9] 執行上面的虛擬碼:

i numbers[i] numbers[i] > max? max
— — — 3
1 8 是 8
2 2 否 8
3 9 是 9

輸出為 9。Paper 2 經常要求完成追蹤表,務必一列一列寫,不要跳步。

還有哪些重要的思考方式?

  • 預先思考(thinking ahead):先想清楚輸入、輸出、前置條件(precondition),例如二元搜尋要求資料已排序。
  • 程序化思考(thinking procedurally):把解法組織成子程序(函式),每個子程序負責一件事。
  • 邏輯思考(thinking logically):找出決策點與條件,確認每一種情況都有處理。
  • 並行思考(thinking concurrently):找出可以同時進行的工作,例如下載多個檔案。

推薦影音

什麼是計算思維?

簡述:GCSE 等級的清楚入門,用生活例子介紹分解、模式辨識、抽象化與演算法,觀念與 IB B1.1 一致。

演算法入門

簡述:Crash Course 介紹什麼是演算法、如何比較演算法效率,並以排序與圖的最短路徑為例,可銜接 B2.4。

練習題

練習 1:分解

把「設計一個學校圖書館借書系統」分解成至少四個子問題。

參考答案

(1) 會員管理:註冊、登入;(2) 書籍管理:新增、搜尋、狀態;(3) 借還書:借出、歸還、到期日計算;(4) 逾期通知與罰款;(5) 報表:熱門書籍統計。

練習 2:抽象化

為一個「校園導航 App」做抽象化:哪些資訊要保留、哪些可以忽略?

參考答案

保留:建築物與教室位置、走道連接關係、距離、無障礙通道。忽略:牆壁顏色、樹木位置、建築外觀細節。

練習 3:追蹤表

完成下列虛擬碼的追蹤表,並寫出輸出。

total ← 0
loop n from 1 to 4
    if n mod 2 = 0 then
        total ← total + n
    end if
end loop
output total
參考答案
n n mod 2 = 0? total
— — 0
1 否 0
2 是 2
3 否 2
4 是 6

輸出 6(1 到 4 之間偶數的總和)。

練習 4:寫虛擬碼

寫出虛擬碼:輸入 10 個溫度,輸出高於 30 度的天數。

參考答案
count ← 0
loop i from 1 to 10
    input temp
    if temp > 30 then
        count ← count + 1
    end if
end loop
output count