一、填空题
(1)运行异常,可以 预料 ,但不能避免,它是由 系统运行环境 造成的。
(2)在小型程序开发中,一旦发生异常所采取的方法一般是 将程序立即中断运行 。
(3)C++的异常处理机制使得异常的引发和处理 不必 在同一函数中。
(4)如果预料某段程序(成对某个函数的调用)有可能发生异常,就将它放在 try语句块 中。
(5)如果某段程序中发现了自己不能处理的异常,就可以使用throw<表达式>抛掷这个异常,其中的<表达式>表示 异常类型 。
(6)如果异常类型声明是一个省略号(....),catch子句便处理 任何 类型的异常,这段处理程序必须是catch块的最后一段处理程序。
(7)异常接口声明也称为 抛出列表 ,已经成为函数界面的一部分。
(8)函数原型的抛出列表是一个空表,表示该函数 不抛出 任何类型的异常。
(9)为了使用异常类,需要包含相应的头文件。其中,异常基础类exception定义于 <exception> 中,bad_ alloc定义于 <new> 中,其他异常类定义于 <stdexcept> 中。
(10)在异常处理程序中发现异常,可以在 catch 语句中用throw语句抛出。
(1)处理异常用到3个保留字,除了try外,还有( A C )。
A. catch B. class C. throw D. return
(2) catch.-.)般放在其他catch子句的后面,该子句的作用是( B )。
A.拋掷异常 B.捕获所有类型的异常
C.检测并处理异常 D.有语法错误
(3)关于异常的描述中,错误的是( D )。
A.异常既可以被硬件引发,又可以被软件引发
B.运行异常可以预料,但不能避免,它是由系统运行环境造成的
C.异常是指从发生问题的代码区域传递到处理问题的代码区域的一个对象
D.在程序运行中,一旦发生异常,程序立即中断运行
(4)下列说法中错误的是( C D )。
A.引发异常后,首先在引发异常的函数内部寻找异常处理过程
B. 抛出异常是没有任何危险的
C.“抛出异常”和“捕捉异常”两种操作最好放在同一个函数中
D.异常处理过程在处理完异常后,可以通过带有参数的throw继续传播异常
三、判断题
(1) try与catch总是结合使用的。 (对)
(2)一个异常可以是除类以外的任何类型。 (错)
(3)抛出异常后一定要马上终止程序。 (错)
(4)异常接口定义的异常参数表为空,表示可以引发任何类型的异常。 (错)
(5)C++标准库中不需要异常类,因为C++标准库中很少发生异常。 (错)
(6)异常处理程序捕获到异常后,必须马上处理。 (错)
(7)一个异常只能在catch语句中再用throw语句抛出。 (错)
(8)当catch子句的异常类型声明参数被初始化后,将从对应的try块开始到异常被抛那处之间构造(且尚未析构)的所有自动对象进行析构。 (对)
(1)什么叫异常处理?
五、程序分析题(分析程序,写出程序的输出结果)
#include<iostream>
using namespace std;
class Nomilk
{
public:
Nomilk();
Nomilk(int how_many);
int get_money();
private:
int count;
};
int main()
{
int money,milk;
double dpg;
try
{
cout<<"Enter nunber of money;";
cin>>money;
cout<<"Enter nunber of glasses of milk:";
cin>>milk;
if(milk <=0)
throw Nomilk(money);
dpg= money/double(milk);
cout<< money<<"yuan"<< endl<<milk<<" glasses of milk."<< endl<<"You have"<<dpg<<"yuan for each glass of milk."<< endl;
}
catch(Nomilk e)
{
cout<<e.get_money()<<"yuan,and No Mike!"<<endl<<"Go buy some milk."<<endl;
}
cout<<"End of program."<<endl;
return 0;
}
Nomilk::Nomilk()
{}
Nomilk::Nomilk(int how_many):count(how_many)
{}
int Nomilk::get_money()
{
return count;
}
写出当分别输人 4 2和 4 0 两组数后的输出结果:
六、程序设计题
从健盘上输人x的值,并计算y =ln(2x+ 1)的值,要求用异常处理”负数束对数”的情况