GESP 二级 · GESP 202309 C++ 二级 第 11 题

选择题 · 答案 B

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

题目

下面 C++ 代码执行后的输出是( )。

int cnt = 0;
for (int i = 1; i < 13; i += 3)
    for (int j = 1; j < i; j += 2)
        if (i * j % 2 == 0)
            break;
        else
            cnt += 1;
cout << cnt;
答案:B

解题思维

这题考嵌套循环和break。外层i=1,4,7,10;内层j< i且步长2。i=1时内层不跑;i=4时j=1就偶数break;i=7时j=1,3,5全是奇数cnt累加3;i=10时j=1偶数break。答案B。

常见错误

容易把i=1当成cnt=1,其实j<1内层一次都不进。还有把break理解成只跳一次迭代,其实只要遇到偶数就立刻跳出内层。另外i=7时j取1,3,5三个值,有人会漏算j=5的情况,导致cnt算少。

详细解析(节选)

考点与命题视角

本题属于GESP二级“程序基础”中循环嵌套与break语句的协同考察。命题人特意把break放在内层循环的条件判断里,目的就是卡住考生对“break只跳出当前层”这一基本规则的模糊认知——很多人误以为break会结束整个程序或外层循环,这题就是专门来纠正这个致命误区的。同时,外层循环步长3与内层步长2的组合,加上i=1这个边界情况,也是常见的挖坑点。从历年数据看,控制结构在题库共考过429题,覆盖7个级别,其中2025年考了160题,2024年138题,说明这类逻辑判断题是高频考点;而循环结构共609题,2025年更是高达158题,GESP二级单独就有172题,可见嵌套循环是二级必考重镇。

解题心法:拿到题先想什么

拿到这种嵌套循环题,第一反应不是急着写代码,而是先模拟执行流程。外层循环i从1开始,步长3,条件i<13,所以i依次取1,4,7,10。内层循环j从1开始,步长2,条件是j<i。关键在于内层那行if (i * j % 2 == 0) break; else cnt += 1;。这里有个细节:i*j是奇数还是偶数,取决于i和j的奇偶性。因为i和j都是整数,且j从1开始步长2,所以j永远是奇数。那么i*j的奇偶性就完全由i决定:i是奇数时,i*j是奇数;i是偶数时,i*j是偶数。

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