GESP 一级 · GESP 202312 C++ 一级 第 13 题

选择题 · 答案 B

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

题目

下图所示 C++ 代码对大写字母 'A' 到 'Z' 分组,对每个字母输出所属的组号,那么输入 'C' 时将输出的组号是( )。

char c;
while(1){
    cin >> c;
    if(c=='q') break;
    switch(c){
        case 'A': cout << "1 "; break;
        case 'B': cout << "3 ";
        case 'C': cout << "3 ";
        case 'D': cout << "5 "; break;
        case 'E': cout << "5 "; break;
        default: cout << "9 ";
    }
    cout << endl;
}
答案:B

解题思维

拿到题先别急着看输出,把switch里每个case后面有没有break圈出来,再按执行流顺一遍——C匹配到3后没有break,会穿透到D输出5,D有break就停了,所以是3 5。

常见错误

很多同学一看到case 'C' 就以为只输出3,忘了switch的穿透特性。还有人会误以为穿透到底会落到default,选了3 5 9,其实D后面有break,根本过不去。最坑的是把case 'D' 的break看成case 'C' 的,或者以为没有break就会一直往下走,结果把default也算进去了。记住:穿透只发生在没有break的case里,遇到break立刻跳出switch。

详细解析(节选)

【考点】switch语句的执行流与break控制|语句穿透(fall-through)

1. 考纲定位

这道题考查的是GESP一级"基础语法"模块中的switch条件分支考点。命题人卡住的是初学者对switch执行流的误解——以为每个case天然就是独立的分支,完全忽略C++语言的"穿透执行"特性。很多学生背下"switch按序匹配",却忘了"匹配成功后若没有break,会继续向下执行下一个case"这一条铁律。

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