最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx
- 文档编号:3053834
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:30
- 大小:34.57KB
最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx
《最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx》由会员分享,可在线阅读,更多相关《最新全国计算机等级考试二级c++题库7共17套Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
D、三角形
在E-R图中用矩形表示实体集,用椭圆形表示属性,用菱形表示联系。
故本题答案为C。
6、有三个关系R,S和T如下:
其中关系T由关系R和S通过某种操作得到,该操作为______。
A、选择
B、投影
C、交
D、并
并:
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的元组组成。
本题中,关系T是关系R和关系S进行并运算得到的。
7、软件设计中划分模块的一个准则是______。
A、低内聚低耦合
B、高内聚低耦合
C、低内聚高耦合
D、高内聚高耦合
耦合性与内聚性是模块独立性的两个定性标准。
在程序结构中,各模块的内聚性越强,则耦合性越弱。
一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。
8、下列数据结构中,属于非线性结构的是______。
B、带链队列
C、二叉树
D、带链栈
如果一个非空的数据结构满足下列两个条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件,也最多有一个后件。
则称该数据结构为线性结构。
本题中循环队列、带链队列和带链栈都是线性结构,二叉树是非线性结构。
9、下列选项中不属于结构化程序设计原则的是______。
A、可封装
B、自顶向下
C、模块化
D、逐步求精
结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句。
10、软件详细设计产生的图如下:
该图是______。
A、N-S图
B、PAD图
C、程序流程图
D、E-R图
程序流程图是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,箭头表示控制流,矩形表示加工步骤,菱形表示逻辑条件。
11、有如下程序:
#include<
iostream>
iomanip>
usingnamespacestd;
intmain(){
ints[]={123,234};
cout<
<
right<
setfill('
*'
)<
setw(6);
for(inti=0;
i<
2;
i++){cout<
s[i]<
endl;
}
return0;
运行时的输出结果是______。
A、123
234
B、***123
C、***123
***234
D、***123
234***
本题主要考查了输出格式控制。
right设置在设定的宽度内右对齐输出(默认对齐方式),用填充字符填充左边。
)设置填充字符为*。
setw(6)指定输出宽度为6,在一个数据输出完后,宽度自动恢复为默认值0(表示按数据实际宽度输入输出)。
因此第一行输出结果为***123,第2行输出结果为234。
故本题答案为B。
12、有如下程序:
#include<
classC1{
public:
~C1(){cout<
1;
};
classC2:
publicC1{
~C2(){cout<
C2cb2;
C1*cb1;
A、121
B、21
C、211
D、12
本题主要考查了派生类析构函数的执行顺序。
析构函数用来完成对象被删除前的一些清理工作,在对象的生存期即将结束的时候由系统自动调用。
删除派生类对象时,析构函数的执行顺序如下:
(1)执行派生类的析构函数;
(2)执行派生类成员对象所在类的析构函数;
(3)执行基类析构函数。
在main()函数中,第一条语句定义了派生类C2的对象cb2,第二条语句声明对象指针cb1,声明指针,只是得到了用于存储地址的指针变量,不会创建对象,故本程序只创建了一个对象cb2。
当main()函数结束时,派生类对象cb2被删除前,系统先执行派生类C2的析构函数,输出2,然后调用基类C1的析构函数,输出1。
故本程序运行时的输出结果是21。
13、在下列枚举符号中,用来表示"
相对于当前位置"
文件定位方式的是______。
A、ios_base:
:
cur
B、ios_base:
beg
C、ios_base:
out
D、ios_base:
end
本题主要考查了文件流的定位。
C++流的定位方式(也就是指针移动方式)有三种:
ios_base:
beg:
相对于文件首。
cur:
相对于当前位置(负数表示当前位置之前)。
end:
相对于文件尾。
14、Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是______。
Samplea[2],*p=newSample;
A、0
B、1
C、2
D、3
本题主要考查了构造函数。
构造函数在对象被创建的时候由系统自动调用。
本题定义了一个含有2个元素的对象数组a和一个指向动态创建对象的指针p,因此共创建了3个对象。
故Sample类的构造函数被调用3次。
15、已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则______。
A、FA必须定义在FB之前
B、FB必须定义在FA之前
C、若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
D、若FB定义在FA之后,则FB的原型必须出现在FA的定义之前
本题主要考查了函数原型。
在C++中,函数在使用之前要预先声明原型。
因此如果函数FB定义在函数FA之后,则必须在函数FA之前声明函数FB的原型,才可以在函数FA中调用函数FB。
16、有如下程序段:
inti=1;
while
(1){
i++;
if(i==10)break;
if(i%2==0)cout<
'
;
执行这个程序段输出字符*的个数是______。
A、10
B、3
C、4
D、5
本题主要考查了while循环和if语句。
在while循环中,变量i的值从1开始,按步长值1递增,当i的值等于10时退出while循环,当i的值为2的整数倍且i的值不等于10时,输出字符*,故执行这个程序段输出字符*的个数为4。
17、有如下模板声明:
template<
typenameT1,typenameT2>
classA;
下列声明中,与上述声明不等价的是______。
A、template<
classT1,classT2>
B、template<
classT1,typenameT2>
C、template<
typenameT1,classT2>
D、template<
typenameT1,T2>
本题主要考查了类模板的声明。
在C++中,类模板声明的语法形式为:
template<
模板参数表声明>
class类名;
每个模板形参具有下面几种形式:
(1)typename<
参数名>
(2)class<
(3)类型修饰<
在这三种形式中,前两种是等价的:
在声明模板参数时,关键字typename与class可以互换。
因此选项A、B、C和该题模板声明等价。
18、有如下程序:
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();
A、运行时出错
B、E2-C16-
C、C4-C16-
D、E2-E4-
本题主要考查了常对象和常成员函数。
使用const关键字修饰的对象称为常对象,使用const关键字说明的成员函数称为常成员函数,const关键字可以用于对重载函数的区分。
本题在A类中说明了两个同名函数print,其中一个是常函数。
在主函数main中说明了两个对象a1和a2,其中a2是常对象。
如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他成员函数,因此通过对象a1调用的是没有用const修饰的函数print,输出E2-,而通过对象a2调用的是用const修饰的常函数print,输出C16-。
故本题程序运行时的输出结果是E2-C16-。
故题答案为B。
19、下列关于虚基类的描述中,错误的是______。
A、使用虚基类可以消除由多继承产生的二义性
B、构造派生类对象时,虚基类的构造函数只被调用一次
C、声明"
classB:
virtualpublicA"
说明类B为虚基类
D、建立派生类对象时,首先调用虚基类的构造函数
本题主要考查了虚基类。
当一个派生类从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行访问时,可能出现二义性。
虚基类就是为了解决这种二义性问题提出来的,因此选项A正确。
使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类子对象,因此,在建立派生类的一个对象时,为保证虚基类子对象只被初始化一次,这个虚基类构造函数必须只被调用一次,因此选项B正确。
虚基类的说明格式如下:
class<
类名>
:
virtual<
继承方式>
<
基类名>
选项C中声明"
说明类A为虚基类,因此选项C错误。
建立派生类对象时,根据派生类构造函数的执行顺序,应首先调用基类构造函数,因此选项D正确。
故本题答案为C。
20、下列关于运算符重载的描述中,错误的是______。
A、:
运算符不能重载
B、类型转换运算只能作为成员函数重载
C、将运算符作为非成员函数重载时必须定义为友元
D、重载[]运算符应完成"
下标访问"
操作
本题主要考查了运算符重载。
C++语言规定,除了.、.*、->
*、:
、?
这五个运算符外,其他运算符都可以重载,因此选项A是正确;
在C++中,运算符函数重载一般有两种形式:
重载为类的成员函数和重载为类的非成员函数。
非成员函数通常是友元。
(可以把一个运算符作为一个非成员、非友元函数重载。
但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。
),因此选项C错误;
=、[]、()、->
以及所有的类型转换运算符只能重载为成员函数,因此选项B正确;
重载的[]应完成"
操作,使得向指定下标处的元素赋值或取值成为可能,因此选项D正确。
21、计算斐波那契数列第n项的函数定义如下:
intfib(intn){
if(n==0)return1;
elseif(n==1)return2;
elsereturnfib(n-1)+fib(n-2);
若执行函数调用表达式fib
(2),函数fib被调用的次数是______。
A、1
B、2
C、3
D、4
本题主要考查了递归函数。
如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。
若执行函数调用表达式fib
(2),则执行表达式fib(2-1)+fib(2-2),即执行表达式fib
(1)+fib(0),故函数fib共被调用了3次:
fib
(2)、fib
(1)和fib(0)。
22、下列关于模板形参的描述中,错误的是______。
A、模板形参表必须在关键字template之后
B、模板形参表必须用括弧()括起来
C、可以用class修饰模板形参
D、可以用typename修饰模板形参
本题主要考查了模板。
在C++中,模板分为函数模板和类模板。
声明一个函数模板的格式是:
template<
模板形参表声明>
函数声明>
声明一个类模板的格式是:
类声明>
所有模版的定义都以关键字template开始,模板形参表必须在关键字template之后,因此选项A正确;
必须用一对尖括号<
>
括起来,因此选项B错误。
每个<
模板形参>
具有下面几种形式:
(1)typename<
(2)class<
(3)类型修饰<
在声明模板参数时,关键字typename与class可以互换,因此选项C、D正确。
故本题答案B。
23、已知数组arr的定义如下:
intarr[5]={1,2,3,4,5};
下列语句中输出结果不是2的是______。
A、cout<
*arr+1<
B、cout<
*(arr+1)<
C、cout<
arr[1]<
D、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++流的描述中,错误的是______。
A、cout>
A'
表达式可输出字符A
B、eof()函数可以检测是否到达文件尾
C、对磁盘文件进行流操作时,必须包含头文件fstream
D、以ios_base:
out模式打开的文件不存在时,将自动建立一个新文件
本题主要考查了C++流。
cout是C++流预定义的标准输出流对象。
插入运算符<
是所有标准C++数据类型预先设计的,用于传送字节到一个输出流对象。
是提取运算符,用于从一个输入流对象获取字节。
故选项A的描述错误。
故本题答案是A。
25、下列关于运算符函数的描述中,错误的是______。
A、运算符函数的名称总是以operator为前缀
B、运算符函数的参数可以是对象
C、运算符函数只能定义为类的成员函数
D、在表达式中使用重载的运算符相当于调用运算符重载函数
运算符函数的函数名是由运算符前加关键字operator构成的,因此选项A正确;
运算符的重载形式有两种,重载为类的成员函数和重载为类的友元函数,因此选项C错误;
在表达式中使用重载的运算符相当于调用运算符重载函数,因此选项D正确;
运算符函数的参数可以是对象,因此选项B正确。
26、有如下程序:
classAA{
AA(){cout<
1'
classBB:
publicAA{
intk;
BB():
k(0){cout<
2'
BB(intn):
k(n){cout<
3'
BBb(4),c;
A、1312
B、132
C、32
D、1412
本题主要考查了类的继承与派生。
建立派生类对象时,构造函数的执行顺序如下:
(1)执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右);
(2)执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明的顺序(自上而下);
(3)执行派生类的构造函数。
在main()函数中,第一条语句定义了两个派生类BB的对象:
b和c,并初始化对象b。
创建对象b时构造函数的执行顺序:
执行基类AA的构造函数,输出1,然后执行派生类BB的带参数的构造函数,输出3;
创建对象c时构造函数的执行顺序为:
执行基类AA的构造函数,输出1,然后执行派生类BB的不带参数的构造函数,输出2。
故程序运行时的输出结果是1312。
故本题答案为A。
27、有如下程序:
className{
charname[20];
Name(){
strcpy(name,"
"
);
?
}
Name(char*fname){
strcpy(name,fname);
Namenames[3]={Name("
张三"
),Name("
李四"
)};
运行此程序输出符号?
的个数是______。
本题的构造函数有两种重载形式:
有参数的和无参数的,无参数的构造函数也称为默认形式的构造函数。
main()函数中,第一条语句定义了一个含有3个元素的Name类对象数组names,即创建了三个Name类对象,建立前两个对象时,给出初始值,因此调用有参数的构造函数,输出2个?
,建立第三个对象时调用无参数的构造函数,输出1个?
,因此运行此程序输出符号?
的个数是3。
28、下列字符串中可以用作C++标识符的是______。
A、2009var
B、goto
C、test-2009
D、_123
本题主要考查了标识符。
标识符的组成要符合一定的规则:
①标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串;
②标识符不能与任意一个关键字同名;
③标识符中的字母区分大小写;
④标识符不宜过长。
选项A的第一个字符是数字,选项B是关键字,选项C中的字符-不合法。
只有选项D可以用作C++标识符。
29、下列枚举类型的定义中,包含枚举值3的是______。
A、enumtest{RED,YELLOW,BLUE,BLACK};
B、enumtest{RED,YELLOW=4,BLUE,BLACK};
C、enumtest{RED=-1,YELLOW,BLUE,BLACK};
D、enumtest{RED,YELLOW=6,BLUE,BLACK};
本题主要考查了枚举常量。
枚举常量是枚举类型中定义的值,即枚举值。
枚举类型实际上是int类型的一个子集,其每一个枚举值代表一个整数;
n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1…n-1对应;
若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2…对应,直到下一个赋了值的枚举值或结束。
因此只有选项A包含枚举值3。
30、有如下类定义:
classXX{
intxdata;
XX(intn=0):
xdata(n){}
classYY:
publicXX{
intydata;
YY(intm=0,intn=0):
XX(m),ydata(n){}
YY类的对象包含的数据成员的个数是______。
派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数。
在一个派生类中,其成员由两部分构成:
一部分是从基类继承得到的,另一部分是自己定义的新成员。
因此派生类YY的数据成员有两个:
一个是从基类XX继承得到的xdata,另一个是自己定义的新数据成员ydata。
31、有如下程序:
classPublication{//出版物类
charname[30];
Publication(char*name="
未知名称"
){
strcpy(this->
name,name);
constchar*getName()const{returnname;
virtualconstchar*getType()const{return"
未知类型"
classBook:
publicPublication{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 全国 计算机等级考试 二级 c+ 题库 17