GESP 二级 · GESP 202412 C++ 二级 第 24 题

判断题 · 答案 A · 考点:循环控制

← 整套速查表 GESP 二级 全部真题

题目

将下面 C++ 代码中的 i = 1 调整为 i = 0 的输出结果相同。( )

int i;
int cnt = 0;
for (i = 1; i < 5; i++)
    if(i%2) cnt += 1;
cout << cnt;
答案:A

考点

循环控制

解题思维

答案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 个,输出会改变。若把筛选条件改为偶数,起始值就会影响结果。做题时先问:"哪些具体数值满足条件?"答案决定了起始值是否重要。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断