GESP 三级 · GESP 202403 C++ 三级 第 6 题

选择题 · 答案 C

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

题目

下面 C++ 代码执行后数组中大于 $0$ 的数的特征是( )。

int main()
{
    int a[20], i;
    for (i = 0; i < 20; i++)
        a[i] = i + 1;

    for (int i = 0; i < 20; i++)
        if ((a[i] % 2) && (a[i] % 3))
            a[i] = 0;

    for (i = 0; i < 20; i++)
        if (a[i])
            cout << a[i] << " ";

    cout << endl;
    return 0;
}
答案:C

解题思维

先别急着看选项,把代码跑一遍:前一个循环把数组填成 1~20,第二个循环里那个 (a[i]%2) && (a[i]%3) 的条件到底筛掉了谁?剩下的就是答案。

常见错误

最容易翻车的是把 C++ 里非零即真的规则搞反,误以为%2非0是假、%3非0是假,从而把条件理解成‘偶数且3的倍数’,直接掉进D选项的坑。另一个经典错误是看到&&就下意识想成‘或’,以为筛掉的是‘能被2或3整除’,结果选C时心里没底。其实命题人就是爱在这里挖‘真值陷阱’,让你以为条件很复杂,其实只要记住:%2非0为真、%3非0为真时才会把数改成0,剩下的才是我们要的。

详细解析(节选)

这道题考查的是数组操作、取模运算以及逻辑与(&&)的真值判断,属于GESP三级里最基础的‘筛选’场景。命题人故意把条件写得有点绕,就是想卡住那些只背语法不琢磨真值的孩子。

先看代码主线:第一个循环把a[0]~a[19]依次赋值为1~20,这一步没有任何陷阱,就是给数组填数。第二个循环才是重头戏:对每个a[i],如果(a[i]%2) && (a[i]%3)成立,就把a[i]改成0。这里的关键在于理解C++里的逻辑真值:任何非零整数在布尔表达式里都视为真,零视为假。所以(a[i]%2)为真,意味着a[i]%2不等于0,也就是a[i]是奇数;同理,(a[i]%3)为真意味着a[i]不是3的倍数。因此,这个条件实际上是在筛选‘奇数且不是3的倍数’的数,并把它们清零。

剩下的数就是没有被清零的,也就是‘偶数或3的倍数’(注意这里是逻辑或,因为只要a[i]%2==0或者a[i]%3==0,条件就不成立,a[i]就会被保留)。现在对照选项:A说剩下的是2的倍数,显然漏掉了3的倍数里的奇数(比如3、9、15、21等),不对;B说剩下的是3的倍数,漏掉了所有偶数,也不对;D说剩下的是能被2和3同时整除的数,那只能是6的倍数,更是大错特错。只有C选项‘能被2或3整除的数’准确描述了剩余集合的特征。

这里有个特别容易踩的坑:很多孩子看到%2非0就以为是假,因为平时做题习惯写a[i]%2==0来判断偶数,结果把&&的条件理解反了,以为是在筛掉偶数,从而选A。其实命题人就是要你跳出这个惯性思维,记住C++里非零即真。再比如,如果题目把&&改成||,那条件就变成‘a[i]%2非0或者a[i]%3非0’,几乎会把所有数都筛掉,只剩0,这时候再回头看选项就会觉得‘这不就是D吗’,其实还是错,因为||的条件太宽泛了。所以刷到这种‘筛’类题,第一步先翻译条件:这个&&到底在选谁、在删谁?把真值表画出来,心里就有底了。

从考频数据来看,‘基础语法’这一大类在题库里出现过1295题,覆盖了从2008年到2026年的所有级别,其中2023年突然暴增到287题,2024年更是达到413题,2025年也有401题,说明这类基础题一直是命题人反复打磨的‘常青树’,尤其是GESP三级,近三年每年都有大量题目涉及数组和条件判断的组合,2024年GESP三级就考了215题,占比很高。‘循环结构’方面,2024年考了128题,2025年158题,2026年161题,逐年递增,可见循环里的逻辑细节是越来越受重视。控制结构(if/else)在2024年考了138题,2025年160题,同样呈上升趋势。

基于这些数据,可以预测未来GESP三级的题目会继续在‘数组+条件判断+循环’的组合上深挖,尤其是那些容易混淆真值逻辑的陷阱题,比如把&&和||混用、把取模结果的正负号搞错等。命题人可能会把条件写得更隐蔽,比如(a[i]%2==1) && (a[i]%3!=0)这种形式,或者在循环里嵌套多个条件,要求你一步步推演哪些数会被保留、哪些会被清零。但只要记住核心原则:先翻译条件,再模拟运行,就能稳稳拿分。

最后再啰嗦一句:这道题的正确答案就是C,没有任何歧义。那些选A、B、D的同学,多半是在真值判断上栽了跟头,或者对‘或’‘且’的逻辑关系理解不透彻。下次遇到类似的筛选题,先问自己:这个条件到底在选谁?把真值表列出来,心里就有数了。

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