下面的 C++ 代码执行后将输出 $45$。( )
int n, i;
n = i = 0;
while (i < 10){
i += 1;
n += i;
}
cout << n;答案B。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】循环控制|变量初始化|累加运算
🎯 考纲定位 GESP 一级 计算模块 第 5 章"循环结构"。命题人专门卡住"循环次数vs变量变化"的混淆——学生总以为 i<10 就跑 10 次,却忽略循环体内 i 先自增再累加,导致把 1~9 的累加误算成 45。
🧠 解题思维 1)模拟执行:n=i=0 初始化两变量。 2)循环条件 i<10 为真时进入:i+=1(i 变为 1),n+=i(n 变为 1)。 3)条件仍真,i 再变为 2,n 再变为 3……直到 i=10 时条件为假退出。 4)共执行 10 次,n 是 1+2+…+10=55,输出 55≠45,选 B。 这类题通法:逐行推演变量值,别靠直觉数次数,一定要看循环体里谁先变。
🪤 陷阱拆解 A 选项的陷阱是"偷换循环体顺序"——若把 i+=1 放到 n+=i 之后,则 n 累加的是 0~9,总和 45,命题人利用"把循环条件当成循环次数"的误区。 另一个阴险点是变量初始化:n=i=0 同时赋值,若只关注 i 而忽略 n,会误以为 n 初始为某个非零值。 只背"while 跑 10 次"就会掉坑里,必须追踪每一步的 i、n 精确值。
🔄 反命题思维 如果把循环体改成 n+=i; i+=1;,答案变 A;改成 while(i<=10) 则 n 变成 66;改成 for(i=0;i<10;i++) 且 n+=i 仍得 45。刷到类似题先问:命题人想考"循环次数"还是"变量变化顺序"?抓住这个意图就能避开陷阱。