GESP 一级 · GESP 202503 C++ 一级 第 5 题

选择题 · 答案 C

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

题目

下面的框架在 L1 和 L2 标记的两行处分别填写选项中的代码,哪组不能通过编译( )。

int main() {
    int i = 0;
    ____________ // L1
    break;
    ____________ // L2
    return 0;
}

A.

do {
} while (i != 0);

B.

for (; i < 10; i++) {
}

C.

if (i == 0) {
}

D.

switch (i) {
}
答案:C

解题思维

答案C。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。

常见错误

将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。

详细解析(节选)

【考点】控制流语句语法|break 作用域|if 语句结构

1. 🎯 考纲定位 GESP 一级 C++ 第 5 章"控制流语句"基础题。命题人卡住的是学生"背了 break 能跳出循环,却没意识到 break 是循环专属关键字"这一认知盲区。一级不考复杂语句嵌套,专挑这种语法禁区来筛人。

2. 🧠 解题思维 看到 L2 是 break,先定位它依赖的上层结构:只有循环或 switch 里 break 才合法。于是快速扫描 L1 各选项的语法类型——A 的 do-while、B 的 for、D 的 switch 都是循环/分支结构,break 能跑。C 的 if 只是条件判断,没有循环语义,break 无处可跳,编译器直接报错。

3. 🪤 陷阱拆解 错误选项 A/B/D 都是"循环 + break 组合",符合语法但无法编译吗?不会,它们恰恰是正确写法。C 选项的陷阱在于:if 语句的语义是"条件成立执行某段代码",它不构成循环结构,break 没有目标可跳出。命题人利用学生"看到 break 就默认能编译"的惯性思维,只抓了语法正确性,没考语义合理性。

4. 🔄 反命题思维 如果把 L2 改成 continue,C 依然不能通过编译,因为 continue 也只在循环内有效。若把 L1 改成 while(i==0),C 就能编译了——break 终于有了循环目标。刷到这类题先问:这个语句到底在什么结构里?

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