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

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

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

题目

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

int x = 1;
while (x < 100) {
    if (!(x % 3))
        cout << x << ",";
    else if (x / 10)
        break;
    x += 2;
}
cout << x;
答案:B

考点

循环控制

解题思维

这题核心是追踪循环执行流。拿到题先别急着看选项,按顺序模拟:x=1 时两个条件都不满足,跳过输出;x=3 时满足第一个条件输出;x=5 到 x=9 依次判断;关键在于 x=11 时,第一个条件不满足,但第二个条件 x/10 在整数除法下为 1,触发 break,循环提前结束。

常见错误

最容易掉进整数除法的坑里,误以为 x/10 是浮点除法或者没意识到 break 会直接跳出循环不再执行 x+=2。还有学生看到 else if 就下意识认为两个条件互斥,以为只要 x%3 不为 0 就一定进 else if,忽略了 x 的取值序列(1,3,5,7,9,11...)中某些数可能同时不满足第一个条件但满足第二个。另外有人会误选 C 把 10 加进去,完全忘了 x 是步长 2 递增,永远跳不过偶数。

详细解析(节选)

【考点】循环控制|条件分支|整数运算|执行流追踪

这道题考查的是循环结构中的多条件判断顺序以及整数除法的实际行为。命题人特别喜欢在这种看似简单的 while 循环里埋下“陷阱”——不是让你算复杂公式,而是让你一步步模拟程序跑起来的样子。很多二级考生一看到 else if 就以为两个条件互斥,或者一看到 x/10 就忽略整数除法截断,直接当成浮点运算,结果就掉进坑里选了 D 或者 C。

1. 程序执行流逐行推演

我们从头开始,像给电脑下指令一样,一行一行看变量 x 的变化和分支判断。

- 先判断 !(x % 3):1 % 3 = 1,非零,所以 !(1) 为假,不执行输出。 - 再判断 else if (x / 10):1 / 10 在 C++ 整数除法中等于 0,条件为假。 - 两个条件都没触发,执行 x += 2,x 变为 3。

- !(3 % 3):3 % 3 = 0,!0 为真,进入 if 分支,执行 cout << 3 << ",";,屏幕上出现 3,。 - 因为 if 已执行,else if 被跳过,不判断 x / 10。 - 执行 x += 2,x 变为 5。

- !(5 % 3):5 % 3 = 2,非零,条件为假。 - else if (5 / 10):5 / 10 = 0,条件为假。 - 两个都不满足,x += 2,x 变为 7。

- !(7 % 3):7 % 3 = 1,假。 - else if (7 / 10):7 / 10 = 0,假。 - x += 2,x 变为 9。

- !(9 % 3):9 % 3 = 0,真,输出 9,。 - x += 2,x 变为 11。

- !(11 % 3):11 % 3 = 2,假。 - 关键来了:else if (11 / 10):11 / 10 在整数除法中等于 1,条件为真! - 于是执行 break,立即跳出循环,后面的 x += 2 完全不会执行。

所以整个程序的输出是:3,9,11。

同考点真题

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