下面的 C++ 代码执行后输出是( )。
int N = 0, i;
for (i = -100; i < 100; i++)
N += i % 10;
cout << N;答案C。逐行追踪代码:从main开始,记录每个变量的值变化。注意循环的起止条件和累加过程。
逐行模拟时建议画表格记录变量值的变化过程,特别是循环体中的变化。
【考点】取模运算|循环边界条件
本题是GESP一级C++真题,精准卡住"取模运算的符号规则"这一薄弱点。命题人用负数模10的循环陷阱,筛选出只会机械套公式的考生。
解题思维:循环共200轮,i从-100到99。观察i%10的规律:每10个连续整数产生一次0,1,2...9的循环,负数区间贡献-45,正数区间贡献+45,两者循环次数完全相同。正负抵消,总和为0。
陷阱拆解:选A的陷阱在于误以为取模结果恒为正,忽略了C++规定负数取模保留符号(如-9%10=-9)。选B的陷阱是误判循环次数或边界,以为正负数各100个却未注意到-100到99共200轮。题目最阴险处在于负数区间比正数区间多1轮(-100到-1),但每轮和恰好抵消,不仔细看会发现正负数各10轮,总和为0。
反命题思维:若循环改为-100到100,答案会变为900;若改为-99到99,答案仍为0。刷到类似题时,先问"取模结果符号是否随被除数改变",这是命题人埋下的核心考点。