農會 資訊管理類程式設計105 年第 9 題單選題
在以下C語言程式中,已知a=10,b=5,下列何者會造成無窮迴圈?
Awhile (a>b) { a=a-b; b=b-a; printf("*"); }正確答案
Bfor (a=0; a<b; a++) printf("*");
Cfor (a=0; a<b; ++a) { printf("*"); }
Dwhile (a==b) { for (a=0;;) printf("*"); }
A正確答案
判斷迴圈終止條件,A選項中a遞增、b遞減,a>b永遠成立導致無窮迴圈。
為什麼答案是 A
初始a=10,b=5。第一次a=a-b=5,b=b-a=0;第二次a=a-b=5,b=b-a=-5;第三次a=a-b=10,b=b-a=-15。a恆大於b,條件永遠成立,形成無窮迴圈。
考點:無窮迴圈追蹤考點:for迴圈終止考點:前置與後置遞增考點:巢狀迴圈陷阱
載入中…
完整詳解
Pro · 無限重點 判斷迴圈終止條件,A選項中a遞增、b遞減,a>b永遠成立導致無窮迴圈。
追蹤變數變化!A選項每次a變大、b變小,a>b條件永遠為真;D選項因10!=5直接跳過。
逐選項分析
A無窮迴圈追蹤✓ 正確
初始a=10,b=5。第一次a=a-b=5,b=b-a=0;第二次a=a-b=5,b=b-a=-5;第三次a=a-b=10,b=b-a=-15。a恆大於b,條件永遠成立,形成無窮迴圈。
Bfor迴圈終止✕
a從0遞增,當a=5時a<b(5<5)為假,迴圈正常結束,共執行5次。
C前置與後置遞增✕
與B選項邏輯相同,++a與a++在for迴圈第三部分(更新運算式)效果一致,正常結束。
D巢狀迴圈陷阱✕ 陷阱
外層while(a==b)因10==5為假,根本不會進入迴圈。內層for雖是無窮迴圈但不會被執行。
迴圈終止條件分析
| 選項 | 初始條件 | 變數變化趨勢 | 是否無窮迴圈 |
|---|
| A | a=10, b=5 | a遞增/正, b遞減/負, a>b恆真 | 是 |
| B | a=0, b=5 | a遞增,直到a=5終止 | 否 |
| C | a=0, b=5 | a遞增,直到a=5終止 | 否 |
| D | a=10, b=5 | a==b為假,直接跳過不執行 | 否 |
選項D故意在內層寫出無窮迴圈for(a=0;;),但外層while(a==b)因10不等於5而為假,導致內層根本不會被執行。考生若只看內層就會誤選D。