// APCS
APCS 大學程式設計先修檢測
APCS 由國立臺灣師範大學辦理,考你能不能讀懂程式、寫出程式。這一頁用我們自己的話整理考試方式、新制級別、學習路線和考試日期。
考試方式
APCS 分成兩個科目,可以只報其中一科,也可以兩科都考:
- 程式識讀:看程式、回答問題。題型包括追蹤程式的執行結果、填空、找錯、估算執行次數或時間複雜度。重點是「讀懂」,不用自己從頭寫。
- 程式實作:在電腦上寫程式解題,送出後由系統用測資評分。重點是「寫得出來、寫得對」。
程式識讀
- 30 題單選題,90 分鐘,滿分 100
- 題本:C、Python 二選一
- 級分:5 級分:90-100 分;4 級分:70-89 分;3 級分:50-69 分;2 級分:30-49 分;1 級分:0-29 分
程式實作
- 3 題,120 分鐘,滿分 300
- 可用語言:C、C++、Java、Python
- 題本分級:初級、中級、中高級、高級,報名時選一級
程式實作各級別的級分
| 題本 | 最高可得 | 原始分數與級分 |
|---|---|---|
| 初級 | 2 級分 | 2 級分:150-300 分;1 級分:0-149 分 |
| 中級 | 3 級分 | 3 級分:150-300 分;2 級分:100-149 分;1 級分:0-99 分 |
| 中高級 | 4 級分 | 4 級分:150-300 分;3 級分:100-149 分;1 級分:0-99 分 |
| 高級 | 5 級分 | 5 級分:150-300 分;4 級分:100-149 分;1 級分:0-99 分 |
2025 新制與級別選擇
從 114 學年度(2025 年 10 月場)起,APCS 改成新制:原本的「觀念題」改名為程式識讀,並新增 Python 題本;原本的「實作題」改名為程式實作,並分成初級、中級、中高級、高級四種題本,報名時選一種。
選級別的時候,記得兩件事:
- 每個級別能拿到的最高級分不同(見上方級分表)。初級題本最高 2 級分,高級題本最高 5 級分。
- 高的級別不是比較划算。如果高級題本的題目寫不出來,分數可能比在中級拿滿還低。先誠實評估自己現在會什麼,再決定。
每個月份開放哪些級別的題本並不相同,我們目前無法從官網確認每一場的對照,報名前請看官網該場次的說明。
更完整的說明請看文章〈APCS 2025 新制:程式識讀與程式實作怎麼選級別〉。
接下來的考試日期
| 考試日期 | 資料狀態 | 報名期間 | 成績公布 | 備註 |
|---|---|---|---|---|
| 2026-11-01(日) | 官網已公告 | 2026-08-03 ~ 2026-09-11 | 2026-11-13 | |
| 2027-01-10(日) | 官網已公告 | 2026-11-23 ~ 2026-12-11 | 2027-01-22 | 本場加開金門、澎湖試場。 |
| 2027-03-14(日) | 官網已公告 | 尚未公告 | — | |
| 2027-06-13(日) | 官網已公告 | 尚未公告 | — | |
| 2027-07-04(日) | 官網已公告 | 尚未公告 | — | 本場加開金門、澎湖試場。 |
| 2027-10-03(日) | 預估 | — | — | 預估。2026 年 10 月場為 10 月第一個星期日(10/4),推得 2027-10-03。 |
| 2027-11-07(日) | 預估 | — | — | 預估。2026 年 11 月場為 11 月第一個星期日(11/1),推得 2027-11-07。 |
資料查核日:2026-10-29。標「預估」的場次是我們依往年規律推估的,不是官方公告。報名前請一律到APCS 官網確認最新日期與規定。
學習路線
官方範圍 字樣出現在主辦單位公布的範圍;教學拆解 是我們為了教學再細分的單元,不是官方範圍條目。「先學」是建議的學習順序。
程式識讀
30 題單選、90 分鐘;可選 C 題本或 Python 題本。考程式追蹤、填空、除錯、效能分析與邏輯解析。
- 題型 官方範圍
- 共同觀念範圍 官方範圍
- 資料型態、常數、變數、指定與表達式 官方範圍
- 控制結構 官方範圍先學:表達式與運算子優先順序
- 循序 官方範圍先學:表達式與運算子優先順序
- 選擇(if / else / switch) 官方範圍先學:循序
- 重複(for / while) 官方範圍先學:選擇(if / else / switch)
- 巢狀迴圈與 break / continue 教學拆解先學:重複(for / while)
- 函式與模組化 官方範圍先學:重複(for / while)
- 函式呼叫、參數與回傳值 官方範圍先學:重複(for / while)
- 變數範圍(區域 / 全域) 教學拆解先學:函式呼叫、參數與回傳值
- 遞迴 官方範圍先學:函式呼叫、參數與回傳值
- 遞迴呼叫追蹤(呼叫樹) 教學拆解先學:函式呼叫、參數與回傳值
- 遞迴呼叫次數與複雜度 教學拆解先學:遞迴呼叫追蹤(呼叫樹)、程式效能分析
- 陣列與串列 官方範圍先學:重複(for / while)
- 一維陣列 / 串列索引 官方範圍先學:重複(for / while)
- 二維陣列 教學拆解先學:一維陣列 / 串列索引、巢狀迴圈與 break / continue
- 基礎資料結構 官方範圍先學:一維陣列 / 串列索引
- 佇列 官方範圍先學:一維陣列 / 串列索引
- 堆疊 官方範圍先學:一維陣列 / 串列索引
- 自訂資料型態(struct / class) 官方範圍先學:資料型態與常數
- 基礎演算法 官方範圍先學:一維陣列 / 串列索引
- 排序(氣泡、選擇、插入) 官方範圍官方只寫「排序」;列出的三種為教學上常見範圍。先學:一維陣列 / 串列索引、巢狀迴圈與 break / continue
- 搜尋(循序、二分) 官方範圍先學:一維陣列 / 串列索引
- C 題本語言細節 教學拆解 C
- 整數除法、取餘數與型別轉換 教學拆解 C先學:表達式與運算子優先順序
- 整數溢位與 int / long long 範圍 教學拆解 C先學:資料型態與常數
- ++ / -- 前後置、短路求值、= 與 == 混淆 教學拆解 C先學:表達式與運算子優先順序
- static 區域變數與全域變數 教學拆解 C先學:變數範圍(區域 / 全域)
- 陣列傳入函式(傳址效果)與字元陣列 教學拆解 C先學:函式呼叫、參數與回傳值、一維陣列 / 串列索引
- Python 題本語言細節 教學拆解 Python
- / 與 //、% 對負數的行為 教學拆解 Python先學:表達式與運算子優先順序
- range 與切片邊界 教學拆解 Python先學:一維陣列 / 串列索引
- 串列別名與可變物件(含二維串列 [[0]*m]*n 陷阱) 教學拆解 Python先學:二維陣列
- global / nonlocal 與預設參數 教學拆解 Python先學:變數範圍(區域 / 全域)
- 字串方法與不可變性 教學拆解 Python先學:資料型態與常數
程式實作(依級別)
由初級往上,每一級都假設你已經會前一級的內容。
初級 變數、選擇、迴圈
- 輸入與輸出讀入整數 / 一行多個數字並輸出 官方範圍
- 輸入與輸出輸出格式(空白分隔、換行、小數位數) 教學拆解先學:讀入整數 / 一行多個數字並輸出
- 輸入與輸出大量輸入加速(scanf / sys.stdin) 教學拆解先學:讀入整數 / 一行多個數字並輸出
- 運算算術運算、整數除法與取餘 官方範圍先學:讀入整數 / 一行多個數字並輸出
- 運算關係與邏輯運算 官方範圍先學:算術運算、整數除法與取餘
- 運算位元運算 官方範圍先學:算術運算、整數除法與取餘
- 運算溢位判斷與 long long 教學拆解先學:算術運算、整數除法與取餘
- 條件判斷與迴圈條件判斷(多重分支) 官方範圍先學:關係與邏輯運算
- 條件判斷與迴圈迴圈(計數、累加、找最大最小) 官方範圍先學:條件判斷(多重分支)
- 條件判斷與迴圈巢狀迴圈 教學拆解先學:迴圈(計數、累加、找最大最小)
中級 陣列 / 串列、字元與字串、文字處理與流程模擬
- 陣列與串列一維陣列存取與走訪 官方範圍先學:迴圈(計數、累加、找最大最小)
- 陣列與串列二維陣列(矩陣、旋轉、轉置) 教學拆解先學:一維陣列存取與走訪、巢狀迴圈
- 陣列與串列計數陣列 / 桶子 教學拆解先學:一維陣列存取與走訪
- 陣列與串列前綴和與差分 教學拆解先學:一維陣列存取與走訪
- 陣列與串列使用內建排序(sort / sorted、自訂比較) 教學拆解先學:一維陣列存取與走訪
- 字元與字串字元與 ASCII 運算 官方範圍先學:算術運算、整數除法與取餘
- 字元與字串字串走訪、比較與子字串 官方範圍先學:字元與 ASCII 運算、一維陣列存取與走訪
- 字元與字串文字處理(切割、解析、統計) 官方範圍先學:字串走訪、比較與子字串
- 流程模擬依規則逐步模擬 官方範圍先學:一維陣列存取與走訪、巢狀迴圈
- 流程模擬棋盤 / 方格上的移動模擬 教學拆解先學:依規則逐步模擬、二維陣列(矩陣、旋轉、轉置)
中高級 基本資料結構與演算法思維
- 函式與遞迴以函式拆解問題 官方範圍先學:迴圈(計數、累加、找最大最小)
- 函式與遞迴遞迴 官方範圍先學:以函式拆解問題
- 佇列與堆疊堆疊(括號匹配、單調堆疊) 官方範圍先學:一維陣列存取與走訪
- 佇列與堆疊佇列(含 deque) 官方範圍先學:一維陣列存取與走訪
- 樹簡單樹(如二元樹)的表示與走訪 官方範圍先學:遞迴、一維陣列存取與走訪
- 列舉、走訪與搜尋列舉(暴力枚舉、子集合) 官方範圍先學:巢狀迴圈、位元運算
- 列舉、走訪與搜尋二分搜(含對答案二分) 官方範圍先學:使用內建排序(sort / sorted、自訂比較)
- 列舉、走訪與搜尋深度優先搜尋(DFS) 官方範圍先學:遞迴、堆疊(括號匹配、單調堆疊)
- 列舉、走訪與搜尋回溯(排列、組合、剪枝) 教學拆解先學:深度優先搜尋(DFS)
- 列舉、走訪與搜尋簡單圖(網格)走訪與連通塊 官方範圍先學:深度優先搜尋(DFS)、棋盤 / 方格上的移動模擬
- 列舉、走訪與搜尋網格 BFS 最短步數 教學拆解註:官方中高級只明列 DFS;BFS 是否屬中高級範圍未經確認。先學:簡單圖(網格)走訪與連通塊、佇列(含 deque)
高級 基本演算法與複雜度
- 樹一般樹、樹高、子樹大小 官方範圍先學:簡單樹(如二元樹)的表示與走訪、圖的表示(鄰接串列 / 矩陣)
- 樹樹上 DP / 後序統計 教學拆解先學:一般樹、樹高、子樹大小、狀態與轉移(一維 DP)
- 複雜度分析由資料範圍估計可接受複雜度 官方範圍先學:二分搜(含對答案二分)
- 圖圖的表示(鄰接串列 / 矩陣) 官方範圍先學:簡單圖(網格)走訪與連通塊
- 圖BFS 與無權最短路徑 官方範圍先學:圖的表示(鄰接串列 / 矩陣)、網格 BFS 最短步數
- 圖拓撲排序 教學拆解先學:BFS 與無權最短路徑
- 動態規劃狀態與轉移(一維 DP) 官方範圍先學:遞迴、前綴和與差分
- 動態規劃二維 DP(方格路徑、LCS) 教學拆解先學:狀態與轉移(一維 DP)、二維陣列(矩陣、旋轉、轉置)
- 動態規劃背包問題 教學拆解先學:二維 DP(方格路徑、LCS)
- 分治分治法(合併排序、逆序數對) 官方範圍先學:遞迴、由資料範圍估計可接受複雜度
- 貪心排序後貪心(區間、排程) 官方範圍先學:使用內建排序(sort / sorted、自訂比較)、由資料範圍估計可接受複雜度
- 貪心優先佇列 / heap 輔助的貪心 教學拆解先學:排序後貪心(區間、排程)、佇列(含 deque)
題單
題目連結準備中:Aki-Judge 題單整理好後會放在這裡。我們只放自己寫的原創題,不轉載官方考題。
程式識讀 題目準備中
共同觀念
- 資料型態、常數、變數、指定與表達式
- 控制結構
- 函式與模組化
- 遞迴
- 陣列與串列
- 基礎資料結構
- 基礎演算法
程式實作・初級 題目準備中
- 讀入整數 / 一行多個數字並輸出
- 輸出格式(空白分隔、換行、小數位數)
- 大量輸入加速(scanf / sys.stdin)
- 算術運算、整數除法與取餘
- 關係與邏輯運算
- 位元運算
- 溢位判斷與 long long
- 條件判斷(多重分支)
- 迴圈(計數、累加、找最大最小)
- 巢狀迴圈
程式實作・中級 題目準備中
- 一維陣列存取與走訪
- 二維陣列(矩陣、旋轉、轉置)
- 計數陣列 / 桶子
- 前綴和與差分
- 使用內建排序(sort / sorted、自訂比較)
- 字元與 ASCII 運算
- 字串走訪、比較與子字串
- 文字處理(切割、解析、統計)
- 依規則逐步模擬
- 棋盤 / 方格上的移動模擬
程式實作・中高級 題目準備中
- 以函式拆解問題
- 遞迴
- 堆疊(括號匹配、單調堆疊)
- 佇列(含 deque)
- 簡單樹(如二元樹)的表示與走訪
- 列舉(暴力枚舉、子集合)
- 二分搜(含對答案二分)
- 深度優先搜尋(DFS)
- 回溯(排列、組合、剪枝)
- 簡單圖(網格)走訪與連通塊
- 網格 BFS 最短步數
程式實作・高級 題目準備中
- 一般樹、樹高、子樹大小
- 樹上 DP / 後序統計
- 由資料範圍估計可接受複雜度
- 圖的表示(鄰接串列 / 矩陣)
- BFS 與無權最短路徑
- 拓撲排序
- 狀態與轉移(一維 DP)
- 二維 DP(方格路徑、LCS)
- 背包問題
- 分治法(合併排序、逆序數對)
- 排序後貪心(區間、排程)
- 優先佇列 / heap 輔助的貪心
想有人陪你準備?
我們的 APCS 檢測準備課程 依這份路線上課,作業在 Aki-Judge 上評測。級分要靠你自己考,我們不做任何級分承諾,但會讓你清楚知道自己卡在哪裡。