GESP 四级 · GESP 202512 C++ 四级 第 15 题

选择题 · 答案 B

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

题目

执行下面 C++ 代码,会输出( )。

int divide(int a, int b) {
    if(b == 0) throw "Division by zero";
    return a / b;
}

int main() {
    int result = 0;
    try {
        result = divide(10, 0);
        cout << "A";
    }
    catch(const char* msg) {
        cout << "B";
        result = -1;
    }
    cout << result;
    return 0;
}
答案:B

解题思维

答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】C++异常处理|字符串字面量抛异常|变量作用域

1. 🎯 考纲定位 GESP四级C++模块,命题人专攻"异常逃逸与变量状态"——90%考生会死磕try块里result=divide(10,0)的返回值,却忘了throw会直接跳出try块,导致result保持初值0,catch才真正执行。

2. 🧠 解题思维 看到try-catch先定位throw位置,这里是b=0时抛字符串,try块立刻终止,result=divide(10,0)不执行,cout<<"A"也不输出;catch捕获后print"B"并赋值result=-1,最后cout<<result输出"-1",组合为"B-1"。

3. 🪤 陷阱拆解 选项A和C都假设try块走完并输出了"A",错在忽略throw会中断执行;若catch块没有result=-1,最终会输出"A0",这是典型的"只记catch存在但忽略内部赋值"的陷阱。

4. 🔄 反命题思维 若把catch里的result=-1改成result=0,答案将变为"B0";若删除catch块,程序会抛出未捕获异常崩溃。刷到类似题先问:异常是否真的被catch到?catch里变量是否被修改?

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