GESP 一级 · GESP 202409 C++ 一级 第 12 题

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

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

题目

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

int count = 0, i, s;
for (i = 0, s = 0; i < 20; i++, count++)
    s += i++;
cout << s << " " << count;
答案:D

考点

循环控制

解题思维

答案D。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。

常见错误

逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。

详细解析(节选)

【考点】循环控制|自增表达式|复合语句

【解题思维】 看到这道题先别急着求和!关键是读懂循环体内for的复合增量:i++, count++,意味着每轮迭代完成后i会额外再+1。再看循环体 s += i++;,这是复合语句——i++先返回当前值再自增。

完整执行过程:第1轮i=0进循环,s+=0后i变1,循环增量又+1→i=2;第2轮i=2进循环,s+=2后i变3,循环增量又+1→i=4;依此类推,i实际参与求和的值是0,2,4,6,8,10,12,14,16,18,共10项,count也正好执行10次。等比求和得s=90,count=10。

【陷阱拆解】 A选项190 20:把i误当成0~19连续累加,且未识别出循环体里i++的副作用,完全忽略了复合语句的求值顺序。 B选项95 10:求和时漏了最后一项18,或者误把i从1开始加到19(0+1+2+…+19=190,一半是95),但count却正确算出10,这种组合只有蒙对一半。 C选项90 19:求和正确但count错算成19,说明只看到了循环条件i<20却忘了i在循环内被两次自增——每轮实际消耗2个i值,20÷2=10轮才对。 最阴险的是复合语句 s += i++;,很多人只看到+=就以为简单累加,忽略了右侧i++还会改变i的值。

【反命题思维】 如果改成for(i=1;i<20;i++,count++) s+=i;,s会变成0~19的等差和190,count仍是10;若把i++换成i+=2,循环次数减半但求和项不变。刷到这类题先画个表:把每轮进入循环时的i、s、count都写下来,别被i++的复合操作绕晕。

同考点真题

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