点击查看:2015年计算机二级考试C++过关练习题及答案汇总
1[判断题]常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。
参考答案:错
2[单选题]有如下程序:
该程序段的输出结果是 ( )。
A.987B.876C.8765D.9876
参考答案:B
参考解析:注意到n--的运算顺序,知道第一次输出的应是8,据此就可以很快排除A和D。然后判断循环几次结束,由于当n-6时,while的条件判断已经不成立了,直接跳过循环体结束程序了。故当n=9,8,7时执行了循环体,故答案为B。
3[单选题]
参考答案:A
4[单选题] 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )。
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
参考答案:C
参考解析:公有继承的派生类和基类是子类型的关系,所谓子类型是类型间一般和特殊的关系,即派生类是基类的子类型或者说基类的操作可以被用于操作派生类的对象。
5[单选题]
A.
B.
C.
D.
参考答案:B
6[单选题]下列关于线性链表的描述中,正确的是( )。
Ⅰ、只含有一个指针域来存放下一个元素地址
Ⅱ、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件l
Ⅲ、结点由两部分组成:数据域和指针域。
A.仅Ⅰ、ⅡB.仅Ⅰ、ⅢC.仅Ⅱ、ⅢD.全部
参考答案:D
参考解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。
7[单选题] 下列关于类和对象的叙述中,错误的是( )。
A.一个类只能有一个对象
B.对象是类的具体实例
C.类是对某一类对象的抽象
D.类和对象的关系是一种数据类型与变量的关系
参考答案:A
参考解析:本题考查类和对象的概念。类是用户定义的一种类型,程序员可以使用这个类型来说明多个变量,即对象。
8[单选题] 下列有关类继承的叙述中,错误的是( )。
A.继承可以实现软件复用
B.虚基类可以解决由多继承产生的二义性问题
C.派生类构造函数要负责调用基类的构造函数
D.派生类没有继承基类的私有成员
参考答案:D
参考解析:本题考查类继承。派生类继承了基类的全部数据成员和私有成员,只是基类的私有成员在派生类中是隐藏的,只能在基类内部访问。
9[简答题](1)应改为“catch(char*s)”。
(2)应改为“cateh(inti)”。
(3)应改为“catch(…)”。
【解析】本题中第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语句修改为“catch(char*S)”。第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修改为“catch(…)”。
参考解析:使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。
程序异常,输出信息为
error
O
ERROR
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include
intmain()
{
try
{
throw("error");
}
//********error********
catch(chars)
{
cout<
}
try
{
throw((int)0);
}
//********error********
catch()
{
cout<
}
try
{
throw(O);
throw("error");
}
//********error********
catch()
{
cout<<"ERROR"<
}
return0;
}
10[简答题]使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。
(1)funl(intn)求出n的阶乘,必须使用递归调用。
(2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。
注意:不能修改函数的其他部分。
试题程序:
#include
//必须使用递归
intfunl(intn)
{
}
//不能使用递归
intfun2(intn)
{
}
voidmain()
{
inti;
cout<<"请输入一个整数:"<
cin>>i;
cout<<"输入数字的阶乘是:"<
cout<<"输入数字的阶乘是:"<
return;
}%
参考解析:
//必须使用递归
jntfunl(intn)
{
if(n<=0)
return0;
if(n==1)
return1;
returnn*funl(n-1);
};
//不能使用递归
intfun2(intn)
{
if(n<=0)
retturn0;
intres=1:
for(inti=1;i<=n;i++)
{
res*=i;
}
returnres;
}
【解析】本题考查的是递归函数和阶乘算法。递归的阶乘算法可以通过判断传入参数,如果大于1,则返回n*funl(n-1),意思是返回n乘以n-1的阶乘;如果等于1,则返回1。这样递归下去就能最终得出n的阶乘。非递归算法可以先建立一个累乘变量,并初始化为1,然后循环遍历1~n,将遍历的数累乘到变量中即可。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |