全国计算机等级考试二级笔试样卷C++语言程序设计资料.docx
《全国计算机等级考试二级笔试样卷C++语言程序设计资料.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级笔试样卷C++语言程序设计资料.docx(25页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级笔试样卷C++语言程序设计资料
全国计算机等级考试二级笔试样卷C++语言程序设计
一、选择题(
(1)~(35)每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)下列选项中不符合良好程序设计风格的是
A)源程序要文档化B)数据说明的次序要规范化
C)避免滥用goto语句D)模块设计要保证高耦合、高内聚
(2)从工程管理角度,软件设计一般分为两步完成,它们是
A)概要设计与详细设计B)数据设计与接口设计
C)软件结构设计与数据设计D)过程设计与数据设计
(3)下列选项中不属于软件生命周期开发阶段任务的是
A)软件测试B)概要设计C)软件维护D)详细设计
(4)在数据库系统中,用户所见的数据模式为
A)概念模式B)外模式C)内模式D)物理模式
(5)数据库设计的四个阶段是:
需求分析、概念设计、逻辑设计和
A)编码设计B)测试阶段C)运行阶段D)物理设计
(6)设有如下三个关系表
R
S
T
A
B
C
A
B
C
m
1
3
m
1
3
n
n
1
3
下列操作中正确的是
A)T=R∩SB)T=R∪S
C)T=R×SD)T=R/S
(7)下列叙述中正确的是
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定小
C)一个算法的时间复杂度大,则其空间复杂度必定小
D)上述三种说法都不对
(8)在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为
A)63B)64C)6D)7
(9)数据库技术的根本目标是要解决数据的
A)存储问题B)共享问题C)安全问题D)保护问题
(10)对下列二叉树
进行中序遍历的结果是
A)ACBDFEGB)ACBDFGEC)ABDCGEFD)FCADBEG
(11)下列有关内联函数的叙述中,正确的是
A)内联函数在调用时发生控制转移
B)内联函数必须通过关键字inline来定义
C)内联函数是通过编译器来实现的
D)内联函数函数体的最后一条语句必须是return语句
(12)下列情况中,不会调用拷贝构造函数的是
A)用一个对象去初始化同一类的另一个新对象时
B)将类的一个对象赋值给该类的另一个对象时
C)函数的形参是类的对象,调用函数进行形参和实参结合时
D)函数的返回值是类的对象,函数执行返回调用时
(13)下列有关继承和派生的叙述中,正确的是
A)如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员
B)派生类的成员函数可以访问基类的所有成员
C)基类对象可以赋值给派生类对象
D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类
(14)下列运算符不能重载为友元函数的是
A)=()[]->B)+-++--
C)><>=<=D)+=-=*=/=
(15)关于在调用模板函数时模板实参的使用,下列表述正确的是
A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B)对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D)对于常规参数所对应的模板实参,任何情况下都不能省略
(16)下列关于输入流类成员函数getline()的描述中,错误的是
A)该函数是用来读取键盘输入的字符串的
B)该函数读取的字符串长度是受限制的
C)该函数读取字符串时,遇到终止符便停止
D)该函数读取字符串时,可以包含空格
(17)下列符号中,正确的C++标识符是
A)enumB)2bC)foo-9D)_32
(18)下列语句中,错误的是
A)constintbuffer=256;B)constdouble*point;
C)intconstbuffer=256;D)double*constpoint;
(19)if语句的语法格式可描述为:
格式1:
if(<条件>)<语句>
或
格式2:
if(<条件>)<语句1>else<语句2>
关于上面的语法格式,下列表述中错误的是
A)<条件>部分可以是一个if语句,例如if(if(a==0)…)…
B)<语句>部分可以是一个if语句,例如if(…)if(…)…
C)如果在<条件>前加上逻辑非运算符!
并交换<语句1>和<语句2>的位置,语句功能不变
D)<语句>部分可以是一个循环语句,例如if(…)while(…)…
(20)有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A)*p+9B)*(p+8)C)*p+=9D)p+8
(21)若有下面的函数调用:
fun(a+b,3,max(n-1,b))
则fun的实参个数是
A)3B)4C)5D)6
(22)以下关键字不能用来声明类的访问权限的是
A)publicB)staticC)protectedD)private
(23)在公有继承的情况下,允许派生类直接访问的基类成员包括
A)公有成员B)公有成员和保护成员
C)公有成员、保护成员和私有成员D)保护成员
(24)关于运算符重载,下列表述中正确的是
A)C++已有的任何运算符都可以重载
B)运算符函数的返回类型不能声明为基本数据类型
C)在类型转换符函数的定义中不需要声明返回类型
D)可以通过运算符重载来创建C++中原来没有的运算符
(25)关于关键字class和typename,下列表述中正确的是
A)程序中的typename都可以替换为class
B)程序中的class都可以替换为typename
C)在模板形参表中只能用typename来声明参数的类型
D)在模板形参表中只能用class或typename来声明参数的类型
(26)有如下程序
#include
#include
usingnamespacestd;
intmain(){
cout<cout<<12.345<<___________<<34.567;
return0;
}
若程序的输出是:
**12.345**34.567
则程序中下划线处遗漏的操作符是
A)setprecision(3)B)fixedC)setfill('*')D)setw(8)
(27)有如下程序
#include
#include
usingnamespacestd;
classMyClass{
public:
MyClass(){cout<<'A';}
MyClass(charc){cout<
~MyClass(){cout<<'B';}
};
intmain(){
MyClassp1,*p2;
p2=newMyClass('X');
deletep2 ;
return0;
}
执行这个程序屏幕上将显示输出
A)ABXB)ABXBC)AXBD)AXBB
(28)有如下程序
#include
usingnamespacestd;
inti=1;
classFun{
public:
staticinti;
intvalue(){returni-1;}
intvalue()const{returni+1;}
};
intFun:
:
i=2;
intmain(){
inti=3;
Funfun1;
constFunfun2;
____________
return0;
}
若程序的输出结果是:
123
则程序中下划线处遗漏的语句是
A)cout<<:
i<
B)cout<:
i<C)cout<<<:
i;
D)cout<
(29)有如下程序:
#include
usingnamespacestd;
classObj{
staticinti;
public:
Obj(){i++;}
~Obj(){i--;}
staticintgetVal(){returni;}
};
intObj:
:
i=0;
voidf(){Objob2;cout<
intmain(){
Objob1;
f();
Obj*ob3=newObj;coutdeleteob3;cout}
程序的输出结果是
A)232B)231C)222D)221
(30)有如下程序
#include
usingnamespacestd;
classBase{
protected:
Base(){cout<<'A';}
Base(charc){cout<
};
classDerived:
publicBase{
public:
Derived(charc){cout<
};
intmain(){
Derivedd1('B');
return0;
}
执行这个程序屏幕上将显示输出
A)BB)BAC)ABD)BB
(31)有如下类定义:
classMyBase{
intk;
public:
MyBase(intn=0):
k(n){}
intvalue()const{returnk;}
};
classMyDerived:
MyBase{
intj;
public:
MyDerived(inti):
j(i){}
intgetK()const{returnk;}
intgetJ()const{returnj;}
};
编译时发现有一处语法错误,对这个错误最准确的描述是
A)函数getK试图访问基类的私有成员变量k
B)在类MyDerived的定义中,基类名MyBase前缺少关键字public、protected或private
C)类MyDerived缺少一个无参的构造函数
D)类MyDerived的构造函数没有对基类数据成员k进行初始化
(32)在一个派生类对象结束其生命周期时
A)先调用派生类的析构函数后调用基类的析构函数
B)先调用基类的析构函数后调用派生类的析构函数
C)如果基类没有定义析构函数,则只调用派生类的析构函数
D)如果派生类没有定义析构函数,则只调用基类的析构函数
(33)有如下的运算符重载函数定义:
doubleoperator+(inti,intk){returndouble(i+k);}
但定义有错误,对这个错误最准确的描述是
A)+只能作为成员函数重载,而这里的+是作为非成员函数重载的
B)两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC)没有将运算符重载函数声明为某个类的友元
D)C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符
(34)语句ofstreamf("SALARY.DAT",ios_base:
:
app);的功能是建立流对象f,并试图打开文件SALARY.DAT与f关联,而且
A)若文件存在,将其置为空文件;若文件不存在,打开失败
B)若文件存在,将文件指针定位于文件尾;若文件不存在,建立一个新文件
C)若文件存在,将文件指针定位于文件首;若文件不存在,打开失败
D)若文件存在,打开失败;若文件不存在,建立一个新文件
(35)有如下程序
#include
usingnamespacestd;
classA{
public:
virtualvoidfunc1(){cout<<"A1";}
voidfunc2(){cout<<"A2";}
};
classB:
publicA{
public:
voidfunc1(){cout<<"B1";}
voidfunc2(){cout<<"B2";}
};
intmain(){
A*p=newB;
p->func1();
p->func2();
return0;
}
运行此程序,屏幕上将显示输出
A)B1B2B)A1A2C)B1A2D)A1B2
二、填空题(每空2分,共30分)
请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。
(1)下列软件系统结构图
的宽度为【1】。
(2)【2】的任务是诊断和改正程序中的错误。
(3)一个关系表的行称为【3】。
(4)按“先进后出”原则组织数据的数据结构是【4】。
(5)数据结构分为线性结构和非线性结构,带链的队列属于【5】。
(6)若有定义语句:
int*a,b;,则变量b的数据类型是【6】。
(7)已知数组a中的元素个数为n,下列语句的作用是将下标为i的元素移动到下标为
i-1的单元,其中1≤i<n。
例如,当n=4,a中原有数据为1,2,3,4时,则移动后a中元素变为2,3,4,4。
请将语句补充完整:
for(inti=0;i a[i]=a[【7】];
(8)已知递归函数f的定义如下:
intf(intn)
{
if(n<=1)return1;//递归结束情况
elsereturnn*f(n-2);//递归}
则函数调用语句f(5)的返回值是【8】。
(9)创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数。
下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是【9】。
#include
usingnamespacestd;
classFoo{
public:
Foo(intx){cout<<'A';}
Foo(){}
};
intmain()
{
Foof[3],g(3);
return0;
}
(10)已知下列程序的输出结果是42,请将画线处缺失的部分补充完整。
#include
usingnamespacestd;
classFoo{
intvalue;
public:
Foo():
value(0){}
voidsetValue(intvalue)
{【10】=value;//给Foo的数据成员value赋值}
voidprint(){cout<};
intmain()
{
Foof;
f.setValue(42);
f.print();
return0;
}
(11)如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。
下列程序没有使用多态机制,其输出结果是【11】。
#include
usingnamespacestd;
classBase{
public:
voidprint(){cout<<'B';}};
classDerived:
publicBase{
public:
voidprint(){cout<<'D';}};
intmain()
{
Derived*pd=newDerived();
Base*pb=pd;
pb->print();
pd->print();
deletepd;
return0;
}
(12)在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承private。
已知有如下类定义:
classBase{
protected:
voidfun(){}
};
classDerived:
Base{};
则Base类中的成员函数fun(),在Derived类中的访问权限是【12】(注意:
要求填写private、protected或public中的一项)。
(13)在MyClass类的定义中,对赋值运算符=进行重载。
请将画线处缺失的部分补充完整。
【13】MyClass:
:
operator=(constMyClass&rhs)
{
if(this==&rhs)return*this;
value=rhs.value;
return*this;
}
(14)插入排序算法的主要思想是:
每次从未排序序列中取出一个数据,插入到已排序序列中的正确位置。
InsertSort类的成员函数sort()实现了插入排序算法。
请将画线处缺失的部分补充完整。
classInsertSort{
public:
InsertSort(int*a0,intn0):
a(a0),n(n0){}//参数a0是某数组首地址,n是数组元素个数
voidsort()
{//此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为a[1]...a[n-1]
for(inti=1;i
intt=a[i];
intj;
for(【14】;j>0;--j){
if(t>=a[j-1])break;
a[j]=a[j-1];}
a[j]=t;}}
protected:
int*a,n;//指针a用于存放数组首地址,n用于存放数组元素个数
};
(15)下列程序的输出结果是【15】。
#include
usingnamespacestd;
classA{
inta;
public:
A():
a(9){}
virtualvoidprint()const{cout<};
classB:
publicA{
charb;
public:
B(){b='S';}
voidprint()const{cout<
};
voidshow(A&x){x.print();}
intmain()
{Ad1,*p;
Bd2;
p=&d2;
d1.print();
d2.print();
p->print();
show(d1);
show(d2);
return0;}
:
i<一、选择题(
(1)~(35)每小题2分,共70分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)下列选项中不符合良好程序设计风格的是
A)源程序要文档化B)数据说明的次序要规范化
C)避免滥用goto语句D)模块设计要保证高耦合、高内聚
(2)从工程管理角度,软件设计一般分为两步完成,它们是
A)概要设计与详细设计B)数据设计与接口设计
C)软件结构设计与数据设计D)过程设计与数据设计
(3)下列选项中不属于软件生命周期开发阶段任务的是
A)软件测试B)概要设计C)软件维护D)详细设计
(4)在数据库系统中,用户所见的数据模式为
A)概念模式B)外模式C)内模式D)物理模式
(5)数据库设计的四个阶段是:
需求分析、概念设计、逻辑设计和
A)编码设计B)测试阶段C)运行阶段D)物理设计
(6)设有如下三个关系表
R
S
T
A
B
C
A
B
C
m
1
3
m
1
3
n
n
1
3
下列操作中正确的是
A)T=R∩SB)T=R∪S
C)T=R×SD)T=R/S
(7)下列叙述中正确的是
A)一个算法的空间复杂度大,则其时间复杂度也必定大
B)一个算法的空间复杂度大,则其时间复杂度必定小
C)一个算法的时间复杂度大,则其空间复杂度必定小
D)上述三种说法都不对
(8)在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为
A)63B)64C)6D)7
(9)数据库技术的根本目标是要解决数据的
A)存储问题B)共享问题C)安全问题D)保护问题
(10)对下列二叉树
进行中序遍历的结果是
A)ACBDFEGB)ACBDFGEC)ABDCGEFD)FCADBEG
(11)下列有关内联函数的叙述中,正确的是
A)内联函数在调用时发生控制转移
B)内联函数必须通过关键字inline来定义
C)内联函数是通过编译器来实现的
D)内联函数函数体的最后一条语句必须是return语句
(12)下列情况中,不会调用拷贝构造函数的是
A)用一个对象去初始化同一类的另一个新对象时
B)将类的一个对象赋值给该类的另一个对象时
C)函数的形参是类的对象,调用函数进行形参和实参结合时
D)函数的返回值是类的对象,函数执行返回调用时
(13)下列有关继承和派生的叙述中,正确的是
A)如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员
B)派生类的成员函数可以访问基类的所有成员
C)基类对象可以赋值给派生类对象
D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类
(14)下列运算符不能重载为友元函数的是
A)=()[]->B)+-++--
C)><>=<=D)+=-=*=/=
(15)关于在调用模板函数时模板实参的使用,下列表述正确的是
A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略
B)对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略
C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略
D)对于常规参数所对应的模板实参,任何情况下都不能省略
(16)下列关于输入流类成员函数getline()的描述中,错误的是