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

选择题 · 答案 A · 考点:循环控制

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

题目

下面的 C++ 代码执行后其输出是( )。

int cnt = 0, i, j;
for (i = 0; i < 3; i++) {
    j = i;
    while (j) {
        cnt += 1;
        j -= 1;
    }
}
cout << i << ' ' << j << ' ' << cnt;
答案:A

考点

循环控制

解题思维

答案A。考点: 循环结构——for/while的执行与嵌套。

常见错误

关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。

详细解析(节选)

【考点】循环控制|变量作用域|GESP二级

🎯 考纲定位 本题位于GESP二级C++"循环结构"模块,专门卡住那些只背"for循环遍历"表象的考生。命题人把i写成循环变量却让它停在3,就是测试你是否真懂循环执行流程而非死记结论。

🧠 解题思维 看到双重循环先数外层循环次数(i=0,1,2共3次)。内层while(j)本质是遍历0~i-1,累加cnt。注意i每次++后才会进入下一轮,循环结束i停在3。j在while中减到0就跳出,作用域为局部,循环外j保持0。

🪤 陷阱拆解 错误选项C把i当2,说明没注意循环条件i<3;选项D把cnt当5,可能是误算while里j减2次;选项B把i当2且cnt当4,混淆了循环次数与累加值。最阴险的是作用域:j在while里减到0就跳出,但j是局部变量,循环外j保持最后一次值0,不是i的值。

🔄 反命题思维 若把i<3改成i<4,输出i=4,j=0,cnt=4+3+2+1=10;若cnt+=1改成cnt+=i,则cnt变成0+1+2+3=6。这类题刷到先问:循环条件边界怎么变?内层循环变量初值怎么改?

同考点真题

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