#6091. gesp四级真题分类八:异常处理

gesp四级真题分类八:异常处理

八、异常处理(共12题)

1. 下面的程序中,如果输入10 0,会输出( )。

double Division(int a, int b) {
    if (b == 0) throw "Division by zero condition!";
    else return (double)a / (double)b;
}
void func() {
    int len, time;
    cin >> len >> time;
    cout << Division(len, time) << endl;
}
int main() {
    try {
        func();
    } catch (const char* errmsg) {
        cout << errmsg << endl;
    } catch (const int errmsg) {
        cout << errmsg << endl;
    }
}

{{ select(1) }}

  • Division by zero condition!
  • 0
  • 程序崩溃

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

int divide(int a, int b) {
    if (b == 0) throw runtime_error("division by zero error ");
    return a / b;
}
int main() {
    int x = 10, y = 0;
    try {
        int result = divide(x, y);
        cout << "result:" << result << endl;
    } catch (const runtime_error& e) {
        cout << "caught an exception:" << e.what() << endl;
    }
}

{{ select(2) }}

  • division by zero error result: caught an exception:
  • result: caught an exception: division by zero error
  • caught an exception: division by zero error
  • division by zero error caught an exception: division by zero error

3. 运行下面的代码,将出现什么情况?( )

double hmean(double a, double b) {
    if (a == -b) throw runtime_error("Runtime error occurred");
    return 2.0*a*b/(a+b);
}
int main() {
    double x = 10, y = -10;
    try {
        int result = hmean(x,y);
        cout << "hmean:" << result << endl;
    } catch (const runtime_error& e) {
        cout << "Caught:" << e.what() << endl;
    } catch (...) {
        cout << "Caught an unknown exception." << endl;
    }
}

{{ select(3) }}

  • 屏幕上输出 Caught: Runtime error occurred
  • 屏幕上输出 Caught an unknown exception
  • 程序调用 std::terminate()
  • 编译错误

4. 在C++中,异常处理机制(try-catch块)的主要目的是( )。

{{ select(4) }}

  • 提高程序的运行速度。
  • 在程序发生运行时错误时,提供一种结构化的错误处理方式。
  • 确保程序在编译时没有错误。
  • 减少程序的内存占用。

5. 关于异常处理,以下说法错误的是( )。

{{ select(5) }}

  • try 块中的代码可能会抛出异常
  • catch 块可以有多个,处理不同类型的异常
  • throw 语句用于抛出异常
  • 所有异常都必须被捕获,否则程序会崩溃

6. 执行下面程序,输出结果是( )。

int divi(int a, int b) {
    if (b == 0) throw 0;
    return a / b;
}
int main() {
    try {
        cout << divi(10, 0);
    } catch (const char* msg) {
        cout << "A";
    } catch (int) {
        cout << "B";
    }
}

{{ select(6) }}

  • A
  • B
  • 程序崩溃
  • 无输出

7. 执行下面代码,输出是( )。

int main() {
    try {
        try {
            throw 42;
        } catch (int e) {
            cout << "Inner: " << e << endl;
            throw;
        }
    } catch (int e) {
        cout << "Outer: " << e << endl;
    }
}

{{ select(7) }}

  • Inner: 42
  • Outer: 42
  • Inner: 42 然后 Outer: 42
  • 程序崩溃

8. 运行下面的代码,将出现( )。

double hmean(double a, double b) {
    if (a == -b) throw runtime_error("Runtime error occurred.");
    return 2.0*a*b/(a+b);
}
int main() {
    double x = 10, y = -10;
    try {
        int result = hmean(x, y);
        cout << "hmean: " << result << endl;
    } catch (const runtime_error& e) {
        cout << "Caught: " << e.what() << endl;
    } catch (...) {
        cout << "Caught an unknown exception." << endl;
    }
}

{{ select(8) }}

  • 屏幕上输出 Caught: Runtime error occurred.
  • 屏幕上输出 Caught an unknown exception.
  • 程序调用 std::terminate()
  • 编译错误

9. 在C++语言中 try 子句里抛出的结构体等类型的异常无法被 catch 捕获。(判断题)

{{ select(9) }}

  • 正确
  • 错误

10. 如果一个异常在 try 块中抛出但没有任何 catch 匹配,它将在编译时报错。(判断题)

{{ select(10) }}

  • 正确
  • 错误

11. 以下代码只能捕获 int 类型异常。(判断题)

int main() {
    try { throw 42; }
    catch(...) { cout << "Caught" << endl; }
    return 0;
}

{{ select(11) }}

  • 正确
  • 错误

12. 下面代码可以正常编译并输出10。(判断题)

#include <iostream>
using namespace std;
int calculate(int x, int y = 10);
int main() { cout << calculate(5); }
int calculate(int x, int y) { return x * y; }
int calculate(int x) { return x * 2; }

{{ select(12) }}

  • 正确
  • 错误