全国计算机等级考试二级c题库7共17套Word格式.docx
《全国计算机等级考试二级c题库7共17套Word格式.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级c题库7共17套Word格式.docx(47页珍藏版)》请在冰豆网上搜索。
6、有三个关系R,S和T以下:
其中关系T由关系R和S经过某种操作获得,该操作为______。
A、选择
B、投影
C、交
D、并
并:
设关系R和关系S拥有相同的目n(即两个关系都有
系R与关系S的并由属于R或属于S的元组组成。
本题中,关系
7、软件设计中划分模块的一个准则是______。
n个属性),且相应的属性取自同一个域,则关
T是关系R和关系S进行并运算获得的。
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次。
D。
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++中,类模板声明的语法形式为:
模板参数表声明>
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
修饰的常函数
,输出C16-。
故本题程序运行时的输出结果是
E2-C16-。
故题答案为
19、以下关于虚基类的描述中,错误的选项是
A、使用虚基类能够除掉由多继承产生的二义性
B、构造派生类对象时,虚基类的构造函数只被调用一次
C、声明"
classB:
virtualpublicA"
说明类B为虚基类
D、建立派生类对象时,第一调用虚基类的构造函数
本题主要观察了虚基类。
当一个派生类从多个基类派生,而这些基类又有一个共同的基类,当对该基类中说明的成员进行接见
时,可能出现二义性。
虚基类就是为认识决这种二义性问题提出来的,因此选项A正确。
使用虚基类解决二义性问题的要点是在派生类中只产生一个虚基类子对象,因此,在建立派生类的一
个对象时,为保证虚基类子对象只被初始化一次,这个虚基类构造函数必定只被调用一次,因此选项B正确。
虚基类的说明格式以下:
class<
类名>
:
virtual<
继承方式
>
<
基类名>
选项C中声明
说明类A为虚基类,因此选项
C错误。
建立派生类对象时,依照派生类构造函数的执行序次,应第一调用基类构造函数,因此选项D正确。
20、以下关于运算符重载的描述中,错误的选项是______。
A、:
运算符不能够重载
B、种类变换运算只能作为成员函数重载
C、将运算符作为非成员函数重载时必定定义为友元
D、重载[]运算符应完成"
下标接见"
操作
本题主要观察了运算符重载。
C++语言规定,除了.、.*、->
*、:
、?
这五个运算符外,其他运算符都能够重载,因此选项A是正确;
在C++中,运算符函数重载一般有两种形式:
重载为类的成员函数和重载为类的非成员函数。
非成员函数平时是友元。
(能够把一个运算符作为一个非成员、非友元函数重载。
但是,这样的运算符函数接见类的私
有和保护成员时,必定使用类的公有接口中供应的设置数据和读取数据的函数,调用这些函数时会降低性
能。
),因此选项
C错误;
=、[]
、()
、->
以及全部的种类变换运算符只能重载为成员函数,因此选项
B正确;
重载的[]
应完成"
下标接见
操作,使得向指定下标处的元素赋值或取值成为可能,因此选项
D正确。
C。
21、计算斐波那契数列第
n项的函数定义以下:
intfib(intn){
if(n==0)
return1;
elseif(n==1)return2;
else
returnfib(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<
在声明模板参数时,要点字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正确;
运算符的重载形式有两
种,重载为类的成员函数和重载为类的友元函数
,因此选项
在表达式中使用重载的运算符相当于调
用运算符重载函数,因此选项
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。
27、有以下程序:
className{
charname[20];
Name(){
strcpy(name,"
);
cout<
?
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的是_