如下 C++ 代码可以执行,其输出是( )。
int i;
for (i = 1; i < 5; i++)
if (i % 2 == 0) {
continue;
cout << i << "#";
}
cout << i << "END#";答案A。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】for循环|continue语句|cout输出
本题考查GESP一级《循环与控制流》模块,核心考点是for循环中continue语句的跳转机制。命题人专盯"死代码"陷阱——continue后紧跟cout看似有用,实则永远执行不到,90%考生会误以为能输出#。i在for前声明,循环内i=1,所以i=1时条件不满足,直接跳过。
按顺序模拟:i=1(奇)跳过,i=2(偶)触continue,i=3(奇)跳过,i=4(偶)触continue,循环结束i=5。最终输出5END#。通法:遇到continue/return/break后紧跟的代码,直接判定为"死代码",无需执行。
选项A正确。选项B是最大陷阱——误以为continue会执行后续cout。选项C/D试图混淆i的终值(循环结束i=5,未执行cout)。命题人利用"未初始化变量"和"死代码"双重隐蔽性,专杀只看结论不追流程的考生。
若把continue换成break,i=2和i=4时都会输出#,答案变2#4#END#。刷到类似题先问:这个语句真能执行吗?continue直接跳回循环头,后面代码永远到不了。