普考申論題
114年
[資訊處理] 程式設計概要
第 三 題
若以f(30)呼叫下列f()函式,會列印出那些數字?(20分)
void f(int n) {
printf ("%d\n", n);
while (n != 1) {
if ((n%3)==1) {
n = n + 2;
}
else if((n%3)==2) {
n = n + 1;
}
else {
n = n/3;
}
printf ("%d\n", n);
}
}
void f(int n) {
printf ("%d\n", n);
while (n != 1) {
if ((n%3)==1) {
n = n + 2;
}
else if((n%3)==2) {
n = n + 1;
}
else {
n = n/3;
}
printf ("%d\n", n);
}
}
📝 此題為申論題
思路引導 VIP
看到此題,應先確認初始輸入值,然後運用逐步追蹤法(Trace Table)依照迴圈條件與條件分支依序執行。重點在於正確計算每次 n 除以 3 的餘數來決定進入哪個分支,並注意 printf 的位置以確保沒有漏掉初始值與最終更新的值。
🤖
AI 詳解
AI 專屬家教
【解題思路】運用逐步追蹤法,根據 while 迴圈條件與 if-else 分支邏輯,一步步記錄變數 n 的變化與列印結果。
【詳解】
已知初始呼叫 f(30),變數 n = 30。
▼ 還有更多解析內容
程式碼逐步追蹤技巧
💡 系統性追蹤變數狀態與迴圈執行流以求精確輸出。
🔗 程式執行追蹤流程
- 1 初始輸出 — 印出參數傳入的初始值 n=30
- 2 模數判斷 — 計算 n%3 剩餘值,選擇對應 if 分支
- 3 變數更新 — 執行賦值運算並列印該階段的 n 值
- 4 條件檢查 — 確認 n!=1 判斷式,決定續留或跳出
↓
↓
↓
🔄 延伸學習:延伸學習:考量此邏輯在不同輸入下是否可能產生無窮迴圈