GESP 一级 · GESP 202312 C++ 一级 第 6 题

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

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

题目

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

cnt = 0;
for(int i = 1; i < 10; i++){
    cnt += 1;
    i += 2;
}
cout << cnt;
答案:C

考点

循环控制

解题思维

这题考的是 for 循环里变量被修改时的执行顺序。拿到题先别急着数次数,而是模拟一遍:i 初始是 1,每次循环先 cnt+=1,再 i+=2,最后系统自动 i++。把 i 的变化列出来,看它什么时候跳出条件 i<10,cnt 就自然出来了。

常见错误

最容易犯的错误是以为循环次数就是 10-1=9,或者误以为 i+=2 和 i++ 会互相抵消,只算一次。还有人会忽略 for 循环的三阶段顺序,把 i+=2 当成在 i++ 之前执行,导致数错步数。

详细解析(节选)

考点与命题视角

GESP 一级算法模块第 3 章,命题人专门卡住初学者“for 循环里改 i”的误区。这道题看似简单,实则考察对循环执行流程的精确理解:初始化、条件判断、循环体执行、增量更新这四个阶段,尤其是循环体内部对循环变量的修改,以及增量更新 i++ 何时发生。

解题思维:模拟而非公式

先想循环条件 i<10 和初始值 i=1。注意 for 循环结构:初始化 i=1 → 判断 i<10 → 执行循环体 → 执行 i++ → 再判断。循环体里 i+=2,结合 i++ 实际每次 i 增加 3。不能直接用 (10-1)/3 这种公式,因为第一次 i 只加了 2 就触发 i++,后面才是加 3,必须逐行追踪。

陷阱拆解:为什么不是 9 次?

A 选项 10 是忽略 i+=2 只按 i++ 算的;B 选项 9 是错误地认为循环次数等于 10-1;D 选项 1 是只执行一次就退出的误解。最阴险的是“循环体里修改 i”——for 循环的 i++ 会在循环体之后执行,所以不能简单当成 i+=2 抵消。真正跑起来:1→4→7→10 停,cnt 刚好 3。

反命题思维

若把 i+=2 改成 i*=2,循环次数会骤减,答案变成 1。刷到类似题先问“循环变量在哪个阶段被修改”。

详细推演(逐行模拟)

设 cnt=0, i=1。

输出 cnt=3。正确答案:C。

易错点总结

逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。最容易错的是把 i+=2 和 i++ 当成同时作用,或者误以为循环次数等于 10-1。

同考点真题

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