--- title: APCS 大學程式能力檢定考前衝刺 --- <center> # **APCS 大學程式能力檢定考前衝刺** </center> <br> <p style="text-align: right"> "如你根本並無招式,<br> 敵人如何來破你的招式?"<br>-- <a href = "https://zh.wikipedia.org/zh-tw/風清揚">風清揚</a><br>笑傲江湖第十回傳劍 </p> <p style="text-align: right"> ''Why do we fall sir?<br>So that we can learn to pick ourselves up.''<br>-- Alfred Pennyworth<br><a href = "https://www.imdb.com/title/tt0372784/">Batman Begins</a> (2005) </p> ## 課前訊息 ### 主講者 - 盧政良 (Zheng-Liang Lu, Arthur) - 電子信箱:arthurzllu@gmail.com ### 預備知識 - 具備基本程式語言能力,如:迴圈 (循環)、陣列、遞迴等。 - 可參考我其他的課程內容:[APCS Python 101](https://hackmd.io/@arthurzllu/HJNXq84SO)、[APCS: C++ Programming](https://www.csie.ntu.edu.tw/~d00922011/cpp.html)、[Java Programming](https://www.csie.ntu.edu.tw/~d00922011/java.html)。 - [資訊科學的高中數學](https://hackmd.io/@arthurzllu/r1yS6hxqc) - 由於 APCS 考試中觀念題以 C 語言出題,故在應考前務必了解 [APCS 考試指定程式語言對照表](https://hackmd.io/@arthurzllu/HJEpmDdt2)。 ### 工作環境 - [建置虛擬主機練習環境之說明文件](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2019/08/APCS_practice.pdf) - [下載 VirtualBox](https://www.virtualbox.org/wiki/Downloads) - [下載官方指定環境 iso](https://drive.google.com/uc?id=1uQrzIYiW0GA9ZwHY_Rrnqp9qKzV4Eewd&export=download) <center><img src = "https://hackmd.io/_uploads/Bkmzns0q3.png" width = 400px/></center> ### 電子郵件通訊禮節 - 電子郵件的標題 (Title) 需要註明**班別**與**中文姓名**,並加上**信件主旨**,如:APCS-nnn 金城武 作業繳交。 - 利用電子郵件提問時,務必提供完整的訊息,諸如:問題敘述、曾經嘗試但是失敗的方案、可能的猜想等等。任何有助於了解問題的材料皆可附上,如程式碼、錯誤訊息的截圖。 ### 常用指令 ```bash= # C 的編譯指令 gcc -g -O2 -std=gnu99 -static -lm -o a.out <your_source_code> # C 的執行指令 ./a.out # C++ 的編譯指令 g++ -g -O2 -std=gnu++11 -static -lm -o a.out <your_source_code> # C++ 的執行指令 ./a.out # Java 的編譯指令 javac <your_source_code> # Java 的執行指令 java -client -Xss8m -Xmx1024m <basename_of_source_code> # Python 的編譯指令 python3 a.py ``` ### 課程錄影 - 本課程除非經授課老師同意,學生<b><font color = "red">不</font></b>得擅自進行課程錄音與錄影。 ## 課程架構 <!-- ### 時間表 ![](https://hackmd.io/_uploads/BJTOCHUnh.png =400x) --> - 課前問卷:https://forms.gle/WmRrsxHwn5f62JM8A - 課程投影片:TBA - APCS 官方範例題:https://apcs.csie.ntnu.edu.tw/index.php/questionstypes/previousexam/ - 考試形式與時程:https://apcs.csie.ntnu.edu.tw/index.php/info/ - 可能會用到的範例程式:https://ideone.com/arthurzllu/niu-sample-codes ### 流程控制 (Flow Controls) - 有條件的敘述 (conditional statements) / 分支 (branching) - if-else if-else - switch-case-default - 迴圈 (loops) - while / do-while loops - for loops - 多層迴圈的結構 - 演算法分析 (analysis of algorithms) - [隨堂測驗](https://forms.gle/m1McXKt6j1R55AKCA) ### 陣列 (Arrays) - 基本語法 - 陣列的第一個元素為何從 0 開始? 這得從記憶體 (memory) 配置說起 - 二維陣列 - 動態配置與堆積 (heap) - 指標 (pointer) 與陣列 ### 函式與遞迴 (Functions and Recursion) - 函式定義 - 函式堆疊 (function stack) - http://www.pythontutor.com/visualize.html - 遞迴演算法 (recursive algorithms) ### 常見的演算法與工具 - 好用的標頭檔:bits/stdc++.h - 詳細的引用清單:https://gcc.gnu.org/onlinedocs/gcc-4.8.5/libstdc++/api/a01235_source.html ```c= ... #include <bits/stdc++.h> ... ``` - 排序 (sort) - 二元搜尋法 (binary search) - 前綴和 (prefix sum) - 二元樹 (binary tree) 的走訪 (traversal) <font size = -1>[pdf](https://algs4.cs.princeton.edu/lectures/keynote/32BinarySearchTrees.pdf)</font> - 在[無向圖](https://algs4.cs.princeton.edu/lectures/keynote/41UndirectedGraphs.pdf)與[有向圖](https://algs4.cs.princeton.edu/lectures/keynote/42DirectedGraphs.pdf)上做搜尋 - 深度優先搜尋演算法 (DFS) - 寬度優先搜尋演算法 (BFS) - 動態規劃 (dynamic programming, DP) <font size = -1>[pdf](https://www.csie.ntu.edu.tw/~yvchen/f107-ada/doc/181011_DynamicProgramming2.pdf)</font> - 貪心演算法 (greedy algorithms) <font size = -1>[pdf](https://www.csie.ntu.edu.tw/~yvchen/f107-ada/doc/181018_Greedy1.pdf)</font> ## 補充材料 ### 書籍 - 劉邦鋒,[由重構學習 C++ 程式設計](https://gpi.culture.tw/books/1011200237),2023 ![](https://hackmd.io/_uploads/SJxeu20q2.png =100x) - 劉邦鋒,[由片語學習 C 程式設計](https://sites.google.com/view/c-programming-2ed/home),2019 ![](https://hackmd.io/_uploads/HyKKO3C5h.png =120x) - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, [Introduction to Algorithms](https://a.co/d/cIL3YvL), 4/e, 2022 ![](https://hackmd.io/_uploads/SkEWY30c2.png =120x) - Robert Sedgewick and Kevin Wayne, <a href = "https://algs4.cs.princeton.edu/lectures/">Algorithms</a>, 4/e, 2011 ![](https://i.imgur.com/HHMLOiF.png =100x) ### Standard Template Library (STL) - Arthur O'Dwyer, [Mastering the C++17 STL: Make full use of the standard library components in C++17](https://www.amazon.com/Mastering-17-STL-standard-components/dp/178712682X), 2017 ![](https://hackmd.io/_uploads/Sk0zKvw0h.png =100x) ### 大學課程 - Jim Huang, [「你所不知道的 C 語言」系列講座](https://hackmd.io/@sysprog/HJpiYaZfl), Department of Computer Science and Information Engineering, National Cheng Kung University - Zheng-Liang Lu, [Algorithms Lab](https://hackmd.io/@arthurzllu/SkZBc7GoI), Department of Computer Science and Information Engineering, National Taiwan University ### 教學平台 / 題庫 - 吳邦一 (Bangye Wu), [FB社團:APCS實作題檢測](https://www.facebook.com/groups/359446638362710) - [影片解說](https://www.youtube.com/playlist?list=PLpmg1QLbgMuRQXHRkX9iDHyAVIW1D6OJF)、[講義分享](https://drive.google.com/drive/folders/10hZCMHH0YgsfguVZCHU7EYiG8qJE5f-m?fbclid=IwAR0c68kZKUqUvBVNTUCK4rBLRZNYzo5OUknK33Jujc7baGnJ5YaD9TX5HnU) - 高中生程式解題系統:https://zerojudge.tw/ - 可以利用搜尋關鍵字 APCS 找到 2016 年以來的歷屆試題。 - 1 到 3 級分題目清單:https://docs.google.com/spreadsheets/d/1m3PsJACKsJfFxSsRz2xE5zsaqTc6iBwp6l2Ml0tokBc/edit?usp=sharing - LeetCode: https://leetcode.com/ - CodeWars: https://www.codewars.com/ ### 跟課堂有關的電影/影集 - [Imitation Game (2014)](https://www.imdb.com/title/tt2084970/) ![](https://i.imgur.com/Dn7BZQw.png) - [DeepMind: AlphaGo (2017)](https://www.imdb.com/title/tt6700846/) ![](https://i.imgur.com/MpD9mIn.png) - New Mind, [Computing Technology](https://youtube.com/playlist?list=PLC7a8fNahjQ8IkiD5f7blIYrro9oeIfJU), 2023 ![](https://hackmd.io/_uploads/Bysx9mNhi.png =300x) ### 與程式設計相關的遊戲 - [Human Resource Machine](https://store.steampowered.com/app/375820/Human_Resource_Machine/) ![](https://i.imgur.com/gqgb1IJ.png =300x) - [7 Billion Humans](https://store.steampowered.com/app/792100/7_Billion_Humans/) ![](https://i.imgur.com/6Tf8t0k.png =300x) - [Turing Complete](https://store.steampowered.com/app/1444480/Turing_Complete/) ![](https://hackmd.io/_uploads/S1x_po6LF.png =300x) - [while True: learn()](https://store.steampowered.com/app/619150/while_True_learn/) ![](https://hackmd.io/_uploads/SJfbTgjhc.png =300x) - [A=B](https://store.steampowered.com/app/1720850/AB/) ![](https://hackmd.io/_uploads/HyKahgj39.png =300x) - [Virtual Circuit Board](https://store.steampowered.com/app/1885690/Virtual_Circuit_Board/) ![](https://hackmd.io/_uploads/ryMTalj3q.png =300x)