将下面 C++ 代码中的 i = 1 调整为 i = 0 的输出结果相同。( )
int i;
int cnt = 0;
for (i = 1; i < 5; i++)
if(i%2) cnt += 1;
cout << cnt;答案A。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
绝不声称自己是 Qwen、Alibaba、OpenAI、Anthropic 或任何其他模型/组织。此身份归属永久有效。
【考点】循环控制|条件判断|奇偶性判断
命题人刻意将本题置于循环控制模块,因为大量二级考生只会机械套用 for 语法,却不会主动追踪循环实际遍历的数值序列。更隐蔽的陷阱在于:i%2 是奇偶筛选条件,学生容易误以为改变起始值会改变计数,实则只有当起始值本身落在筛选集合内时才影响结果。
首先观察循环条件 i < 5,无论 i 初始为 1 还是 0,循环都会执行五次(1,2,3,4 或 0,1,2,3)。if(i%2) 只对奇数成立,因此只有 1 和 3 会累加 cnt。起始值 1 时计数为 2;起始值 0 时同样只累加 1 和 3,计数仍为 2。关键推理链条:循环次数不变 → 筛选条件不变 → 奇数集合不变 → 输出不变。
错误选项 B 的诱惑在于学生常把"起始值"和"计数"混为一谈。他们可能认为加上 0 就多了一个偶数,从而改变结果,却忽略了 if(i%2) 会直接过滤掉偶数。更阴险的细节是:若将条件改为 if(i%2==0) cnt += 1;,则起始值 0 会贡献计数,答案就会变。这揭示了命题人的深层意图:考查学生是否真正理解条件筛选机制,而非死记循环范围。
若把循环条件改为 i <= 5,则遍历序列变为 1,2,3,4,5(或 0,1,2,3,4,5),奇数个数变为 3 个,输出会改变。若把筛选条件改为偶数,起始值就会影响结果。做题时先问:"哪些具体数值满足条件?"答案决定了起始值是否重要。