GESP 二级 · GESP 202606 C++ 二级 第 21 题

判断题 · 答案 B · 考点:循环控制

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

题目

如下 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

考点

循环控制

解题思维

答案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前,答案全变。

同考点真题

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