GESP 一级 · GESP202609 C++ 一级 第 9 题

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

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

题目

执行如下 C++ 代码,变量都是整型,则其输出是(  )。

int cnt, i;
cnt = 0;
for (i = -10; i < 0; i++)
cnt += 1;
cout << (i * cnt);
答案:C

考点

循环控制

解题思维

循环执行时,i 从 -10 开始,只要 i<0 就继续循环,每次循环 cnt 加 1。关键在于循环结束时的 i 值是多少——题目里 i 在循环体后自增,当 i=-1 时满足条件执行最后一次,随后 i 变成 0,条件 0<0 不再成立,循环终止。所以最后 i=0、cnt=10,输出 i*cnt=0。

常见错误

错误选项 B 和 D 都源于对循环终止条件的误判。命题人挖了个坑:i 在循环体末尾才自增,考生容易以为循环结束时 i 仍停留在 -1,于是算出 i*cnt=-1*10=-10 或 -1*9=-9,却忘了自增已经把 i 推到了 0。正确选项 C 就是专门针对这个边界陷阱设置的。

详细解析(节选)

1. 考纲定位

本题考查循环控制与条件判断,属于 GESP 一级编程中的基础考点。命题人在这道选择题里埋了一个经典的「循环终止边界」陷阱:for 循环的自增操作发生在末尾,循环条件在自增后再次判断。绝大多数考生会忽略这个时序细节,误以为 i 停在 -1,从而选错。这道题的杀伤力就藏在「自增后条件不成立」这一秒的语义变化上。

2. 解题思维

看到这题先想循环执行了几次。i 初始为 -10,条件 i<0,所以 -10,-9,-8,…,-1 这 10 个数都会进入循环体,cnt 从 0 累加到 10。关键是循环结束时的 i 值——i 在循环体末尾执行 i++,因此当 i 从 -1 自增到 0 时,条件 0<0 不成立,循环终止。最终输出 i*cnt = 0*10 = 0。

同考点真题

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