第 一 題
小題 (一)
int i=1;
while (i <= 10)
{
if (i < 5 && i !=2)
std::cout << 'X';
i ++;
}
思路引導 VIP
本題要求兩項任務:1. 將 while 迴圈改寫為 for 迴圈。2. 追蹤程式碼並寫出輸出結果。思考順序:先將初始化 (int i=1)、條件判斷 (i<=10)、遞增 (i++) 整合到 for(;;) 語法中。接著追蹤變數 i 從 1 到 10 的變化,條件為 i < 5 且 i != 2,因此符合條件的 i 為 1, 3, 4,每次符合印出 'X',共印出三次。
小題 (二)
思路引導 VIP
看到本題(配合第2頁程式碼),首先進行語法檢查。掃描每一行,發現第 12 行 result += remainder*remainder*remainder 結尾漏了分號 ;。接著追蹤邏輯:使用者輸入 153 給 number,originalNumber = 153。進入 while 迴圈:第一次 remainder=3,result=0+333=27,original/=10->15;第二次 remainder=5,result=27+555=152,original->1;第三次 remainder=1,result=152+111=153,original->0。結束迴圈,輸出 "輸出為:153"。這是一個計算阿姆斯壯數(Armstrong number)的邏輯。
小題 (三)
思路引導 VIP
本題需要仔細追蹤程式流程。變數 x 初始化為使用者輸入的 32。迴圈 for (int i = 1; x > 0; i++)。第一個 if 判斷 x % i == 0,若成立印出 i 與空格,這是在尋找 x 的因數。當 i 一路遞增到 32 時,32 % 32 == 0 成立,印出 "32 "。接著進入第二個 if:if (x == i),此時 32 == 32 成立,執行區塊內邏輯:將 i 設為 0,印出換行,印出字串 "請輸入一個正整數:",並等待 cin >> x;。題目只問「當使用者輸入 32,其輸出結果為何」,表示追蹤到程式等待下一次輸入前的所有畫面輸出。
小題 (四)
思路引導 VIP
本題要求寫一個副程式(Function/Method),同時求出 GCD 與 LCM。思考演算法:求 GCD 最有效率的方法是「輾轉相除法(Euclidean algorithm)」;而求 LCM 的公式為 (a * b) / GCD(a, b)。寫作時,因為要回傳兩個值,在 Python 中可以直接回傳 Tuple 非常方便;若選用 C/C++,可透過「傳遞參照 (Pass by Reference)」或指標來實作,或者直接在副程式中印出結果(若題目未嚴格規定回傳方式,印出或回傳皆可,但回傳或修改參照較符合「求」的含義)。