将下面 C++ 代码中的 i < 100; i = i + 1 修改为 i < 200; i += i + 1,其输出与当前代码输出相同。( )
int cnt = 0;
for (int i = 0; i < 100; i = i + 1)
cnt += 1;
cout << cnt;答案B。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】for 循环控制流|等差数列求和(原逻辑)|指数增长序列(新逻辑)
🎯 考纲定位(考点定位) GESP 一级涉及基础语法和循环结构。命题人故意把步进改成"自增自加"的指数增长,卡住的是"只读条件不看更新"的惯性思维。
🧠 解题思维(拆解与通法) 原循环 i 从 0 到 99,共执行 100 次,cnt 累加 100。修改后步进为 i += i + 1,序列为 0→1→3→7→15→31→63→127→255,第 8 次更新后 i=255 已不满足 i < 200,循环仅执行 8 次,cnt 累加 8。
🪤 陷阱拆解(命题人的套路) 选项 A 的"正确"是典型陷阱,利用 i < 200 的宽松条件误导考生以为次数变多,却忽略了步进公式使序列呈指数增长。最阴险的细节在于 i += i + 1 的"自增自加"表述,若只背"循环次数 = 阈值"的结论,会完全误判。
🔄 反命题思维(教练升华) 若把条件改成 i < 10,原逻辑输出 10,新逻辑输出 4(0→1→3→7→15 停止),命题人想考你是否真的理解了步进对终止条件的动态影响。