GESP 三级 · GESP 202312 C++ 三级 第 11 题

选择题 · 答案 A · 考点:循环控制

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

题目

下面 C++ 程序执行的结果是()。

int cnt=0;
for(int i=0;i<=20;i++)
{
    if(i%3==0&&i%5==0)
    {
        cnt++;
    }
}
cout<<cnt;
答案:A

考点

循环控制

解题思维

这题看着像考公倍数,其实是考循环边界和取模运算。拿到题先别急着算15的倍数,把循环的起始值i=0代入条件里验证一下,往往就能直接排除几个干扰项。

常见错误

很多学生会忽略for循环的初始值i=0,或者误以为i%3==0&&i%5==0意味着i必须是15的倍数且大于0,从而漏掉了0这个特例。还有人会把i=0代入时认为0%3=0成立但0%5=0也成立,却忘记0本身也是15的倍数,导致在数个数时少算一个。此外,部分同学会错误地认为循环到20意味着i=20也要检查,其实i=20时20%15≠0,不满足条件,这里容易因粗心多算或少算。

详细解析(节选)

【考点】循环控制|模运算优先级|逻辑与

1. 考纲定位 本题是GESP三级"循环与条件判断"的典型题,命题人重点考查对for循环范围(含0)和%运算优先级的理解,而非复杂算法。题目给出的C++代码非常简洁,核心在于理解i从0开始遍历到20,以及条件i%3==0&&i%5==0的真假判断。

2. 解题思维 看到i%3==0&&i%5==0,先想"3和5的公倍数"。循环从0开始,0%15=0成立,15%15=0成立,20%15≠0。通法:遇到多条件模运算,先求LCM简化判断,再数区间内个数。这里LCM(3,5)=15,所以我们要找的是0到20之间15的倍数。

3. 陷阱拆解 错误选项B=3、C=5、D=4是典型"漏0"或"误算LCM"产物。命题人设坑:很多人忽略循环从0开始,以为3和5的公倍数只有15,忘记0%15=0也成立。若只背"公倍数计数"而忽略边界,必掉进这个坑。此外,还有学生可能误以为i=20也要检查,其实i=20时20%15≠0,不满足条件,这里容易因粗心多算或少算。

4. 反命题思维 若把循环改到0-29,答案仍为2(15和30都超了);若改成||,答案会大幅跳变。刷到这类题,先问自己:命题人是不是在考循环边界和逻辑运算符优先级。本题中,i=0时,0%3==0为真,0%5==0也为真,且0是15的倍数,所以cnt++执行一次。i=15时,15%3==0为真,15%5==0也为真,且15是15的倍数,所以cnt++执行一次。i=20时,20%3==1,不满足条件。因此,cnt最终为2。

5. 考频与趋势 从题库数据看,"循环控制"这一考点在GESP三级中已考过89题,其中2023年考了2题,2024年考了1题,2025年尚未出现。这表明该考点在GESP三级中属于高频考点,但近年来出题频率略有下降,可能命题人正在调整难度或题型。不过,"循环控制"作为基础语法的一部分,在GESP一级、二级中也分别考了133题和133题,说明该知识点贯穿各级别,重要性不言而喻。

6. 预测 基于现有数据,"循环控制"在GESP三级中的考频虽有所下降,但考虑到其在GESP一级、二级中的高占比,未来几年仍可能以不同形式(如嵌套循环、循环与数组结合、循环与位运算结合等)出现在三级考试中。暂无足够依据预测具体年份,但建议考生重点掌握循环边界、取模运算、逻辑运算符优先级等基础概念,以应对各类变式。

综上所述,本题答案为A,即cnt=2。

同考点真题

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