如下 C++ 代码执行后,输出值为 0 。
int cnt, i, j;
cnt = 0;
for (i = 0; i < 10; i++) {
continue;
for (j = 0; j < i; j++)
cnt += 1;
}
cout << i * cnt;看到题先想循环控制语句的作用,尤其是 continue 会跳过后续语句。然后看循环头 i 的初始化、条件、增量。最后看变量 cnt 的初始值。这类题的通法是逐行模拟执行,关注循环变量的变化。
选项陷阱在于误以为 continue 只跳过内层循环,或者认为内层循环至少执行一次。易错原因是忽略了 continue 会直接跳出当前循环体,导致内层循环体完全不被执行。
本题考查 GESP 二级大纲中"循环控制语句"与"循环执行流程"两个核心考点。命题人放这道题,就是要卡住那些只背语法、不模拟执行的考生——他们往往误以为 continue 只跳过内层循环,或者认为内层循环至少执行一次,从而错误判断 cnt 的值。
逐行模拟执行:i 初始为 0,进入循环体后立刻遇到 continue,直接跳至 i++,i 变为 1;再次循环,continue 仍生效,i 变为 2……直到 i 达到 10,循环结束。整个过程中内层 for 循环体从未被执行,cnt 保持 0。最终输出 i * cnt = 10 * 0 = 0。
逐个选项拆解:A 正确,因为 continue 会直接跳出当前循环体,内层循环体完全不被执行;B 错误,它假设内层循环至少执行一次,这是典型的"语法记忆型"误区——考生只背了 continue 的语法,却忘了它在循环体中的实际位置(在 i++ 之前)。
反命题思维:如果把 continue 去掉,内层循环会执行,cnt 会累加到 45(0+1+2+...+9)。如果把 cnt 初始化为 1,输出会变成 10。如果把 i 的循环条件改成 i < 5,输出会变成 5 * 0 = 0。