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

选择题 · 答案 C

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

题目

运行下面的代码,屏幕上将输出( )。

#include <iostream>
using namespace std;

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

int main() {
    int x = 10;
    int y = 0; // 设为 0 会导致除零错误
    try {
        int result = divide(x, y);
        cout << "result: " << result << endl;
    } catch (const runtime_error& e) {
        cout << "caught an exception: " << e.what() << endl;
    }
    return 0;
}
答案:C

解题思维

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

常见错误

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

详细解析(节选)

【考点】异常处理|try-catch 块执行顺序

1. 🎯 考纲定位 GESP 四级 C++ 异常处理,考察对 throw 和 catch 的理解,以及异常发生时程序流程的控制。这道题卡住了 80% 考生对"异常中断 try 块"这一执行语义的模糊认知。

2. 🧠 解题思维 main 中 try 执行 divide,b=0 触发 throw,中断 try 块,catch 捕获并打印 e.what()。注意:throw 是抛出异常对象,消息内容只在 catch 内通过 what() 读取,且 try 块内后续代码(如 cout << result)因异常中断根本不会被执行。

3. 🪤 陷阱拆解

4. 🔄 反命题思维 若 try 块内先打印再抛异常,cout 仍会执行;若 catch 内不调用 what(),则无输出。刷异类题先问:异常何时抛出、何时被捕获、何时输出。

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