如下 C++ 代码执行后,输出值为 $9$。
int cnt = 0, i;
for (i = 0; i < 10; i++) {
for (int j = 0; j < i; j++)
cnt += 1;
break;
}
cout << i;答案B。考点: 循环结构——for/while的执行与嵌套。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
【考点】循环控制流|break作用范围|嵌套循环变量
考查循环控制流与break语句的作用范围——命题人专卡"break只跳出当前循环"这一易错点,让80%考生误判为外层循环被中断。二级大纲中"循环结构"模块常以嵌套循环+异常退出为陷阱,本题即通过内层循环条件自动失效(j<0)与break提前跳出,双重锁定i未变。
首轮i=0时,内层j<0不成立,cnt未累加,随即break跳出外层。输出i仍为0而非9。通法:遇到break务必先标记"当前层退出",再检查外层变量是否被修改。嵌套循环中,break仅作用于最内层,外层循环变量i、j均不受影响,除非另有continue或i被间接赋值。
陷阱A:误以为break跳出外层循环,导致认为i被赋值为10;陷阱B:忽略内层j<i=0的条件,误判cnt累加9次;陷阱C:混淆j与i的作用域,以为i在break前已变为9。若只背"break跳出循环"而不区分层级,必错。
反命题视角:若问cnt值应为0,问i值仍是0,问内层执行次数为0。刷到此类题先自问:命题人是否在测试break的层级范围?是否在考察循环条件短路?是否在混淆变量作用域?类似变体可改为"cnt++"在break后、"j++"在break前,答案全变。