最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx
《最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx》由会员分享,可在线阅读,更多相关《最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
故本题答案为Do
7、
软件设计中划分模块的一个准则是o
低内聚低耦合
高内聚低耦合
低内聚高耦合
高内聚高耦合
耦合性与内聚性是模块独立性的两个定性标准。
在程序结构中,各模块的内聚性越强,则耦合性越弱。
一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
故本题答案为Bo
下列数据结构中,属于非线性结构的是o
循环队列
带链队列
二叉树
带链栈
如果一个非空的数据结构满足下列两个条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一
个前件,也最多有一个后件。
则称该数据结构为线性结构。
本题中循环队列、带链队列和带链栈都是线性结构,二叉树是非线性结构。
9、
下列选项中不属于结构化程序设计原则的是o
可封装
自顶向下
模块化
逐步求精
goto语句。
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用故本题答案为Ao
10、软件详细设计产生的图如下:
12、有如下程序:
#include<
iostream>
usingnamespacestd;
classC1{public:
~C1(){cout<
<
1;
}
};
classC2:
publicC1{
public:
~C2(){cout<
2;
intmain(){
C2cb2;
C1*cb1;
return0;
}运行时的输出结果是
析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时候由系统自动调用。
删除派生类对象时,析构函数的执行顺序如下:
(1)执行派生类的析构函数;
(2)执行派生类成员对象
所在类的析构函数;
(3)执行基类析构函数。
在main()函数中,第一条语句定义了派生类第二条语句声明对象指针cb1,声明指针,只是得到了用于存储地址的指针变量,不会创建对象,只创建了一个对象cb2。
当main()函数结束时,派生类对象cb2被删除前,系统先执行派生类输出2,然后调用基类C1的析构函数,输出1。
故本程序运行时的输出结果是21。
故本题答案为B。
13、在下列枚举符号中,用来表示"
相对于当前位置"
文件定位方式的是
14、Sample是一个类,执行下面语句后,调用Sampie类的构造函数的次数是
Samplea[2],*p=newSample;
A、0
B、1
C、2
D、3本题主要考查了构造函数。
构造函数在对象被创建的时候由系统自动调用。
本题定义了一个含有2个元素的对象数组a和一个指向
动态创建对象的指针P,因此共创建了3个对象。
故Sample类的构造函数被调用3次。
在C++中,函数在使用之前要预先声明原型。
因此如果函数FB定义在函数FA之后,则必须在函数FA之前
声明函数FB勺原型,才可以在函数FA中调用函数FBo
16、有如下程序段:
inti=1;
while
(1){
i++;
if(i==10)break;
if(i%2==0)cout<
'
*'
;
执行这个程序段输出字符*的个数是
B、
D、
C、5
本题主要考查了while循环和if语句。
在while循环中,变量i的值从1开始,按步长值1递增,当i的值等于10时退出while循环,当i的值为2的整数倍且i的值不等于10时,输出字符*,故执行这个程序段输出字符*的个数为4o
故本题答案为Co
17、有如下模板声明:
template<
typenameT1,typenameT2>
classA;
下列声明中,与上述声明不等价的是
模板参数表声明>
class类名;
每个模板形参具有下面几种形式:
(1)typename<
参数名>
(2)class<
typename与class可以互换。
因此选项
(3)类型修饰<
在这三种形式中,前两种是等价的:
在声明模板参数时,关键字
AB、C和该题模板声明等价。
18、有如下程序:
#include<
classA{
A(inti):
r1(i){}
voidprint(){cout<
'
E'
r1<
-'
voidprint()const{cout<
C'
r1*r1<
private:
intr1;
Aa1
(2);
constAa2(4);
a1.print();
a2.print();
}运行时的输出结果是运行时出错
本题主要考查了常对象和常成员函数。
使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数,const关键字可以用于对重载函数的区分。
本题在A类中说明了两个同名函数print,其中一个是常函数。
在主函
数main中说明了两个对象a1和a2,其中a2是常对象。
如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他成员函数,因此通过对象a1调用的是没有用const修饰的函数print,
输出E2-,而通过对象a2调用的是用const修饰的常函数print,输出C16-。
故本题程序运行时的输出结果是
E2-C16-。
故题答案为B。
当一个派生类从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行访问
A正确。
时,可能出现二义性。
虚基类就是为了解决这种二义性问题提出来的,因此选项使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类子对象,因此,在建立派生类的一个对象时,为保证虚基类子对象只被初始化一次,这个虚基类构造函数必须只被调用一次,因此选项B正确。
虚基类的说明格式如下:
class<
类名>
:
virtual<
继承方式>
<
基类名>
选项C中声明"
classB:
virtualpublicA"
说明类A为虚基类,因此选项C错误。
建立派生类对象时,根据派生类构造函数的执行顺序,应首先调用基类构造函数,因此选项故本题答案为C。
常是友元。
(可以把一个运算符作为一个非成员、非友元函数重载。
但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。
),因此选项C错误;
=、[]、()、->
以及所有的类型转换运算符只能重载为成员函数,因此选项B正确;
重载的[]应完成-下标访问"
操作,使得向指定下标处的元素赋值或取值成为可能,因此选项□正确。
故本题答案为C。
21、计算斐波那契数列第n项的函数定义如下:
intfib(intn){
if(n==0)return1;
elseif(n==1)return2;
elsereturnfib(n-1)+fib(n-2);
}若执行函数调用表达式fib
(2),函数fib被调用的次数是
A、
1
C、
4本题主要考查了递归函数。
如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。
若执行函数调用表达
式fib
(2),则执行表达式fib(2-1)+fib(2-2),即执行表达式fib
(1)+fib(0),故函数fib共被调用了3次:
fib
(2)、fib
(1)和fib(0)。
22、下列关于模板形参的描述中,错误的是。
模板形参表必须在关键字template之后模板形参表必须用括弧()括起来可以用class修饰模板形参可以用typename修饰模板形参本题主要考查了模板。
在C++中,模板分为函数模板和类模板。
声明一个函数模板的格式是:
template<
模板形参表声明
声明一个类模板的格式是:
template<
模板形参表声明所有模版的定义都以关键字
>
函数声明>
类声明>
template开始,模板形参表必须在关键字template之后,因此选项A正确;
模板形参表声明>
必须用一对尖括号<
括起来,因此选项B错误。
每个<
模板形参>
具有下面几种形式:
(1)typename<
参数名>
(2)class<
在这三种形式中,前两种是等价的:
在声明模板参数时,关键字typename与class可以互换,因此选项
CD正确。
故本题答案BO
23、已知数组arr的定义如下:
intarr[5]={1,2,3,4,5};
下列语句中输出结果不是2的是
cout<
*arr+1<
endl;
*(arr+1)<
arr[1]<
cout<
*arr<
本题主要考查了数组和指针。
在C++中,数组的名字就是指向该数组第一个元素(下标为0)的指针,即该数组第一个元素的地址,也即数组的首地址。
因此表达式*arr等价于arr[0],故选项D的输出结果为1;
选项A中,表达式*arr+1等价于表达式a[0]+1,输出结果为2。
一般情况下,一个数组元素的下标访问a[i]等价于相应的指针访问*(a+i),因此选项B和选项C均输出元素arr[1]的值,即2。
24、下列关于C++流的描述中,错误的是。
cout>
A'
表达式可输出字符A
eof()函数可以检测是否到达文件尾对磁盘文件进行流操作时,必须包含头文件fstream以ios_base:
out模式打开的文件不存在时,将自动建立一个新文件
本题主要考查了C++流O
cout是C++流预定义