下面 C++ 代码执行后的输出是( )。
int cnt;
cnt = 0;
for(int i = 1; i < 10; i++)
cnt += i++;
cout << cnt;
cout << endl;答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】循环控制|自增运算符|变量作用域
本题考查循环体中的自增运算符与累加逻辑,属于 GESP 一级基础知识点。命题人通过 i++ 后置递增制造"先加后变"的陷阱,卡住的是对运算符优先级和求值顺序理解不牢的考生。
看到 i++ 要立刻反应:右值先参与运算,左值再自增。循环共执行 9 次(i=1~9),每次把当前 i 值加到 cnt 上,即 cnt=1+2+…+9=45。i 递增到 10 才终止循环,不影响累加结果。
错误选项 A 把 i++ 当成前缀递增,误算成 10~9 累加得 54;B 看似正确但混淆了循环次数;D 完全忽略累加逻辑。最阴险的是选项 C,把 i 当作只累加到 5,源于误以为 i 从 1 开始只执行 5 次——这暴露了对循环边界条件的模糊。
反命题视角:若将 i++ 改为++i,cnt 将变为 10+9+…+1=55;若循环条件写成 i<=10,则 cnt=55。刷到这类题先问"命题人想考我什么",警惕"先加后变"与"先变后加"的微妙差别。