GESP 二级 · GESP202609 C++ 二级 第 12 题

选择题 · 答案 C · 考点:循环控制

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

题目

下面 C++ 代码执行后其输出是(  )。

int count, i, j;
count = 0;
for (i = 1; i < 4; i++)
for (j = 0; j < i; j++) {
if (j % 3 == 0)
continue;
count += 1;
if (i * j >= 2)
break;
}
printf("%d %d %d", i, j, count);
答案:C

考点

循环控制

解题思维

看到双重循环先锁定外层i的范围(1~3),内层j从0到i-1。关键要盯住continue跳过j%3==0的迭代,以及i*j>=2时立即break。循环结束后printf输出的是i,j的最终值,不是最后一次循环里的值,这点极易被忽略。

常见错误

选项B把i写成3,选项D把j写成2,都是没注意到break后j停在1。选项A的count=2是对的,但i,j全错。最阴险的是printf在循环外,很多人会下意识用最后一次循环里的i,j去填,导致选错。

详细解析(节选)

考纲定位:本题属于GESP二级"循环结构"模块,命题人专门卡住"循环结束后变量值"这个盲点。绝大多数考生会盯着最后一次循环里的i=3,j=1,却忘了printf在循环外,此时i已自增为4。

解题思维:外层i从1走到3,内层j从0走到i-1。j=0时j%3==0直接continue,count不加;j=1时count+1,i*j=2触发break,j停在1;i=2时j=0继续,j=1继续,i*j=2再break,j仍为1;i=3同理,j=1时break,j=1。循环结束i=4,j=1,count=2。

陷阱拆解:选项B的i=3是典型"循环内值"陷阱;选项D的j=2是误以为break后j++;选项A的count=2正确但i,j全错。最阴险的是printf在循环外,很多人会下意识用最后一次循环里的i,j去填,导致选错。

反命题思维:如果把break改成continue,内层会跑完所有j,count会多算;如果把printf移到循环内,输出会变成每次循环的值;如果把i<4改成i<=4,外层多一次i=4,count会再+1。

同考点真题

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