GESP 一级 · GESP202609 C++ 一级 第 10 题

选择题 · 答案 D

← 整套速查表 GESP 一级 全部真题

题目

如下 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);
答案:D

解题思维

看到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才是正确路径。

详细解析(节选)

1. 考纲定位

本题考查的是《GESP 一级 C++大纲》中"循环结构与控制流程"模块的核心能力——命题人把for循环、if-else分支、continue和break混在一个短代码里,卡住的是绝大多数考生对循环终止条件的理解。一级考生最容易犯的错误就是看到continue以为会走完循环,或者忽略循环外还有语句,这道题就是专门针对这个弱点设计的。

2. 解题思维

看到for循环先判断终止条件——这里有break,说明循环不会跑完。i从1开始,第一个数1%3=1≠0,直接进else分支。else里是printf("%d-",1)然后break,循环立刻结束,后面printf("%dEND*",1)照样执行。所以答案必须包含1-和1END*,且中间不能有空格。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断