下面 C++ 代码执行后输出是( )。
int i;
for(i = 1; i < 10; i++) {
if(i % 3 != 0) {
printf("A#");
continue;
}
else
break;
printf("0#");
}
if(i == 10) cout << "1";答案A。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】循环控制流|条件分支执行
考纲定位:本题对应 GESP C++ 二级"循环结构与条件分支"模块,卡住的是考生对 continue 与 break 执行流程的混淆——绝大多数人误以为 continue 会跳过本次循环剩余代码,却忽略了 break 会立即终止循环并保留当前循环变量的值。
解题思维:看到题先想循环变量的初始值和更新规则。i 从 1 开始,每次循环末尾 i++。关键观察是 break 在 i=3 时触发,循环体后续语句(包括 printf 和 i++)不再执行,因此循环结束时 i 仍为 3,不满足 if(i==10)。通法是:遇到循环内 break 后,循环变量保持当前值,后续条件判断基于该值。
陷阱拆解:选项 B 和 D 错误地认为 continue 后 i 会继续增加,忽略了 break 会提前终止循环;选项 C 错误地认为 i 会变成 10,忽略了 break 后循环变量不变;最阴险的细节是 if(i==10) 这个判断,考生容易误以为循环结束后 i 是 10,实际是 3。命题人利用的是对循环变量更新机制的误解。
反命题思维:如果把 break 改成 continue,循环会继续到 i=9,输出会不同;如果把判断条件改成 i%2,循环会在 i=2 时 break,输出也不同。提醒刷到类似题时,先问自己"命题人想考我什么",是考察循环控制流还是条件判断。