如下 C++ 代码执行输出是( )。
int i;
for (i = 1; i < 5; i++) {
if (i % 3 == 0) {
printf("%d+", i);
continue;
} else {
printf("%d-", i);
break;
}
}
printf("%dEND*", i);看到for循环先判断终止条件——这里有break,说明循环不会跑完。看到if(i%3==0)要快速算第一个数1%3=1≠0,直接进else分支。else里是printf("%d-",1)然后break,循环立刻结束,后面printf("%dEND*",1)照样执行。所以答案必须包含1-和1END*,且中间不能有空格。
选项A漏了END*部分,命题人故意把循环后那条printf丢进选项,考你是否注意到循环外语句仍会执行。选项B加了空格,从printf("%d-")和printf("%dEND*")的格式字符串看,输出紧挨着没有空格,这是细节陷阱。选项C更离谱,把continue和break混用,仿佛i=1时条件成立进入if分支,实际上1%3≠0,且break会让循环终止,根本不会继续输出2-2。选项D才是正确路径。
本题考查的是《GESP 一级 C++大纲》中"循环结构与控制流程"模块的核心能力——命题人把for循环、if-else分支、continue和break混在一个短代码里,卡住的是绝大多数考生对循环终止条件的理解。一级考生最容易犯的错误就是看到continue以为会走完循环,或者忽略循环外还有语句,这道题就是专门针对这个弱点设计的。
看到for循环先判断终止条件——这里有break,说明循环不会跑完。i从1开始,第一个数1%3=1≠0,直接进else分支。else里是printf("%d-",1)然后break,循环立刻结束,后面printf("%dEND*",1)照样执行。所以答案必须包含1-和1END*,且中间不能有空格。