下面的框架在 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。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】控制流语句语法|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 终于有了循环目标。刷到这类题先问:这个语句到底在什么结构里?