执行下面的 C++ 代码段,如果变量都为整型变量,输入为大于 $0$ 的整数,则输出数值一定为 $-N$ 的值。
cin >> N;
total = 0;
for (i = -N; i < N; i += 2)
total += i;
cout << total;答案A。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】循环迭代|等差数列求和
解题思维 看到循环先数迭代次数:从 -N 到 N 步长 +2,共 N 项。再看数列结构:-N, -N+2, ..., 0, ..., N-2。这是项数为 N、公差为 2 的等差数列,其前 N 项和 S = N×(-N + (N-2))/2 = -N。数学上这就是等差求和公式的直接应用。
陷阱拆解 A 选项看似正确,但命题人埋了个隐蔽边界:N 本身是循环次数,也是求和结果。很多考生只验证 N=1 或 N=2 就草率下结论,忽略了 N 为奇数时中间项正好是 0,偶数时对称抵消后仍剩 -N。这题卡住的就是"只验证特例、不推导通式"的惰性思维。
反命题思维 若把循环条件改成 i <= N,那总和变成 -N + N = 0,答案全反。下次刷到这类题先问自己:循环边界是 < 还是 <=?步长和项数关系里有没有隐藏抵消?