二级C++142.docx
《二级C++142.docx》由会员分享,可在线阅读,更多相关《二级C++142.docx(25页珍藏版)》请在冰豆网上搜索。
二级C++142
二级C++-14-2
(总分:
86.00,做题时间:
90分钟)
一、{{B}}选择题{{/B}}(总题数:
35,分数:
60.00)
1.下面程序的输出是
main()
{intx=100,a=10,b=20,ok1=5,ok2=0;
if(a<b)
if(b!
=15)
if(!
ok1)
else
if(ok2)x=10
x=-1
cout<<x<<end1;
}
∙A.-1
∙B.0
∙C.1
∙D.不确定的值
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]本题考察订语句的嵌套,else总是与最近的那个if配对,只要考生按照逻辑表达式的值进行细心判断就可以得到正确的答案。
考生需要注意的是,在C++语言中,0表示假,非0即为真,因此可以用数字作为逻辑判断的依据。
2.在C++语言程序中,对象之间的相互通信通过
∙A.继承实现
∙B.调用成员函数实现
∙C.封装实现
∙D.函数重载实现
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]对象属于某个已知的类,是类的实例,对象之间通信实际上就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于类的方法的改变和补充,重载是多态性之一。
3.有如下数组声明:
intnum[10];,下标值引用错误的是
∙A.num[10]
∙B.num[5]
∙C.num[3]
∙D.num[0]
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]数组定义中的数字指的是数组的大小,而下标是从0开始的,所以题中数组的最后一个元素是num[9]。
4.下列关于类和对象的叙述中,错误的是{{U}}{{/U}}。
∙A.一个类只能有一个对象
∙B.对象是类的具体实例
∙C.类是对某一类对象的抽象
∙D.类和对象的关系是一种数据类型与变量的关系
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]此题考查的是类和对象的相关概念。
类是将不同的数据和与这些数据相关的操作封装起来装在一起的集合体。
对象是类的具体实例,也即类是对某一类对象的抽象,类和对象之间可以说是数据类型与变量的关系。
一个类可以有无数个对象。
5.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为()。
∙A.a
∙B.AA.a
∙C.a{}
∙D.AA:
:
a{}
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]类AA的成员函数直接引用类AA的非静态数据成员。
6.若函数中有定义语句“intk;”,则{{U}}{{/U}}。
∙A.系统将自动给k赋初值0
∙B.这时k中的值无定义
∙C.系统将自动给k赋初值-1
∙D.这时k中无任何值
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]根据题目,若以这种方式定义变量k时,编译程序仅为k开辟存储单元,并未在存储单元中存放任何初始值,所以变量中的值无意义,称变量值“无定义”。
所以正确答案为选项B。
7.有如下定义:
inta[5]={1,3,5,7,9},*p=a;
下列表达式中不能得到数值5的是______。
∙A.a[2]
∙B.a[3]
∙C.*(p+2)
∙D.*p+4
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题考查指向数组的指针,本题中指针变量p指向数组a,直接使用数组下标即可取值,数组下标是从0开始标号的,所以a[2]能取到5,而a[3]取不到5,C选项中使用指针后移方法能够取到5,D选项中*p为1,所以*p+4为5。
8.语句cout<<setprecision
(2)<<1024.4567;的输出结果为
∙A.1024.4567
∙B.1024
∙C.1024.45
∙D.le+003
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]setprecision()函数的考查。
[解题要点]setprecision()函数为设置小数位数。
[考点链接]C++中I/O流各种函数的使用例如:
setw(),setfill()。
9.若有如下程序:
#include<iostream>
usingnamespacestd;
classTestClass
{
public:
voidwho(){cout<<"TestClass"<<endl;}
};
classTestClass1:
publicTestClass
{
public:
voidwho(){cout<<"TestClass1"<<endl;}
};
intmain()
{
TestClass*p;
TcstClass1obj1;
p=&obj1;
p->who();
return0;
}
则该程序运行后的输出结果是{{U}}{{/U}}。
∙A.TestClass1
∙B.TestClass
∙C.0
∙D.无输出
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]程序中的TestClas1为TestClass的派生类,主函数main中定义TestClass对象*p,TestClass1对象obj1,然后p引用obj1,执行p->who()则是调用基类中的who函数,输出TcstClass。
10.将E-R图转换到关系模式时,实体与联系都可以表示成
∙A.属性
∙B.关系
∙C.键
∙D.域
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]数据库逻辑设计的主要工作是将E—R图转换成指定RDBMS中的关系模式。
首先,从E—R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E—R图中属性也可以转换成关系的属性。
实体集也可以转换成关系。
11.{{U}}{{/U}}复审应该把重点放在系统的总体结构、模块划分、内外接口等方面。
∙A.详细设计
∙B.系统设计
∙C.正式
∙D.非正式
(分数:
2.00)
A.
B. √
C.
D.
解析:
12.关于友元的概念错误的是{{U}}{{/U}}。
∙A.友元函数没有this指针
∙B.调用友元函数时必须在它的实参中给出要访问的对象
∙C.一个类的成员函数也可以作为另一个类的友元函数
∙D.只能在类的公有段声明友元
(分数:
1.00)
A.
B.
C.
D. √
解析:
13.在下面程序中,编译时出现错误的是______。
ClassA//
(1)
{
public:
//
(2)
A(){
f();//(3)
}
voidB(){
f();
}
virtualvoidf()const=0;//(4)
};
∙A.
(1)
∙B.
(2)
∙C.(3)
∙D.(4)
(分数:
2.00)
A.
B.
C. √
D.
解析:
14.适于对动态查找表进行高效率查找的组织结构是{{U}}{{/U}}。
∙A.有序表
∙B.分块有序表
∙C.三叉排序树
∙D.线性链表
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]适于对动态查找表进行高效率查找的组织结构是三叉排序树。
15.C++语言中while循环和do-while循环的主要区别是{{U}}{{/U}}。
∙A.do-while的循环体至少无条件执行一次
∙B.while的循环控制条件比do-while的循环控制条件严格
∙C.do-while允许从外部转到循环体内
∙D.do-while的循环体不能是复合语句
(分数:
2.00)
A. √
B.
C.
D.
解析:
16.不合法的main函数命令行参数表示形式是
∙A.main(inta,char*c[])
∙B.main(intarc,char**arv)
∙C.main(intargc,char*argv)
∙D.main(intargv,char*argc[])
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]在C++语言里,main函数也可以有参数,例如:
main(intarvc,char*argv),argc:
是指向字符串的指针数组,而选项C)是第二个形参是指向字符变量的指针,是错误的。
17.下列有关继承和派生的叙述中,正确的是{{U}}{{/U}}。
∙A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员.
∙B.派生类的成员函数可以访问基类的所有成员
∙C.基类对象可以赋值给派生类对象
∙D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类
(分数:
2.00)
A.
B.
C.
D. √
解析:
18.已知类MyClass声明如下:
classMyClass{
intU;
public:
MyClass(intk):
n(k){}
intgetValue()const{returnn;}
};
在下列数组定义中正确的是
∙A.MyClassxl[2];
∙B.MyClassx2[2]={newMyClass
(1),newMyClass
(2)};
∙C.MyClass*x3[2];
∙D.MyClass*x4[2]={MyClass
(1),MyClass
(2)};
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]对象作为数组元素,对数组初始化赋值时,调用无参构造函数时,数组定义格式为:
类名数组名[下标表达式]=new类名()调用带有一个参数的构造函数时,数组定义格式为:
类名数组名[下标表达式]=new{类名(参数),类名(参数)……},或者类名数组名[下标表达式]={参数1,参数2,……}。
当定义指针时,指针数组的每个元素都应该新建一个对象,一般格式为:
类名*指针名={new类名(参数),new类名(参数),……}。
19.一个函数功能不太复杂但要求被频繁调用,应选用
∙A.内联函数
∙B.重载函数
∙C.递归函数
∙D.嵌套函数
(分数:
1.00)
A. √
B.
C.
D.
解析:
解析:
本题考查的是内联函数的使用,它的引入是为了解决程序中函数调用的效率问题,在编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来替换。
20.树是结点的集合,它的根结点数目是{{U}}{{/U}}。
∙A.有且只有1
∙B.1或多于1
∙C.0或1
∙D.至少2
(分数:
2.00)
A. √
B.
C.
D.
解析:
21.数据库技术的根本目标是要解决数据的{{U}}{{/U}}。
∙A.存储问题
∙B.共享问题
∙C.安全问题
∙D.保护问题
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个应用程序共享的目标。
22.以下程序的输出结果是{{U}}{{/U}}。
#include<iostream.h>
voidmain()
{inti,j,x=0;
fof(i=0;i<2;i++=
{x++;
for(j=0;j<3;j++=
{if(j%2)continue:
x++;
x++;}
cout<<"x="<<x;=
∙A.x=4
∙B.x=8
∙C.x=6
∙D.x=12
(分数:
1.00)
A.
B. √
C.
D.
解析:
23.有如下函数模板声明:
template<typename,T>
TMax(Ta,Tb){return(a>b)?
a:
b;}
下列对函数模板Max()的调用中错误的是______。
∙A.Max(3.5,4.5)
∙B.Max(3.5,4)
∙C.Max<double>(3.5,4.5)
∙D.Max<double>(3.5,4)
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]本题考查函数模板的引用。
引用模板函数和引用一般函数在语法形式上基本相同。
需要注意的是,说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否调用函数模板中的对应形参。
本题选项B中,编译系统从第一个参数“3.5”获得信息“double型数据”和从第二个参数获得信息“inL型数据”,两者矛盾。
24.要通过函数实现一种不太复杂的功能,并且要求加快执行速度,则应该选用
∙A.重载函数
∙B.内联函数
∙C.静态函数
∙D.虚函数
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]内联inline函数就是取代宏定义的,在编译时展开,插入到相应的位置,从而减少了系统开销,加快了执行速度。
虚函数则是为了取消二义性现象,静态函数则是一个类所有对象的共享函数。
25.以下选项中合法的实型常数是
∙A.5E2.0
∙B.E-3
∙C..2E0
∙D.1.3E
(分数:
2.00)
A.
B.
C. √
D.
解析:
[解析]本题考查实型常数的指数表示法,可以肯定的是指数不能为小数即必须为整数,故排除A.由于符号E前面必须有数字,故B也是错误的。
D在指数符号后面没有数字,是错误的。
答案为C。
26.在一个无向图中,所有顶点的度数之和等于所有边数的{{U}}{{/U}}倍。
∙A.3
∙B.2
∙C.1
∙D.1/2
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]在一个无向图中,所有顶点的度数之和等于所有边数的2倍。
27.设有intx=11;,则表达式(x++*2/3)的值是{{U}}{{/U}}。
∙A.7
∙B.8
∙C.11
∙D.12
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增1,所以表达式(x++*2/3)相当于(11*2/3)取整后为7。
28.下列程序执行结果是
#include<iostream.h>
classA
{public:
inta;
A():
a(10){tout<<a<<endl;}
};
voidmain()
{Aobj1;
Aobj2(obj1);
cout<<""<<obj2.a<<endl;
}
∙A.1010
∙B.编译错误缺少拷贝构造函数
∙C.10随机数
∙D.随机数随机数
(分数:
2.00)
A. √
B.
C.
D.
解析:
[解析]本题考察拷贝构造函数的知识。
如果类中没有实现拷贝构造函数,则编译器会为其自动生成一个。
对于本题这种简单对象,默认生成的拷贝构造函数可以完成数据成员的自动赋值,对于复杂对象,则可能需要显式定义拷贝构造函数。
29.软件生命周期的三个阶段是______、软件开发、运行维护。
∙A.软件需求
∙B.软件设计
∙C.软件测试
∙D.软件分析
(分数:
2.00)
A.
B. √
C.
D.
解析:
[解析]软件生命周期的三个阶段是软件设计、软件开发、运行维护。
30.下列数组的定义中,会产生错误的是{{U}}{{/U}}。
∙A.inta[]={'0','1','2','3','4','5','6'};
∙B.inta[10]={0,1,2,3,4,5,6};
∙C.chara[5]="hello";
∙D.chara[5]={'h','e','1','1','o'};
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题考核数组的定义以及字符串数组方面的基础知识。
下面逐项进行分析:
选项A中,数组a的定义和初始化符合数组的定义和初始化语法,故正确:
选项B中,数组a初始化的值虽然没有10个,但对于少的部分,系统会自动补0,所以选项B中数组的定义也是正确;选项C中,数组a的长度为5,但字符串"hello",的长度为5+1=6,字符串结束符,10,无法存储在数组中,所以是错误的;选项D中,数组a的定义是正确的。
31.下列关于getline()函数的描述,不正确的是______。
∙A.getline()函数是用来从输入流中读取字符串的
∙B.getline()函数读取字符串的长度是受到限制的
∙C.getline()函数读取字符串时,遇到终止符时就停止
∙D.getline()函数中所使用的终止符只能是换行符
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]getline()函数从输入流中读取多个字符,并且允许指定输入终止符,其原型为:
getline(char*line,intsize,char='/n')其中,第3个参数为自定义输入终止符。
32.下列关于信息和数据的叙述不正确的是{{U}}{{/U}}。
∙A.信息是数据的符号表示
∙B.信息是数据的内涵
∙C.信息是现实世界事物的存在方式或运动状态的反映
∙D.数据是描述现实世界事物的符号记录
(分数:
2.00)
A. √
B.
C.
D.
解析:
33.有以下类定义:
classPoint{
public:
Point(intx=0,inty=0){_x=x;_y=y;}
voidMove(intxOff,intyOff)
{_x+=xOff;_y+=yOff;}
voidPrint()const
{
cout<<'('<<_x<<','<<_y<<')'<<end1;}
private:
int_x,_y;
}
下列语句中会发生编译错误的是______。
∙A.Pointpt;pr.Print();
∙B.constPointpt;pt.Print();
∙C.Pointpt;pt.Move(1,2);
∙D.constPointpt;pt.Move(1,2);
(分数:
2.00)
A.
B.
C.
D. √
解析:
[解析]const修饰符改变值出错。
34.算法分析的目的是{{U}}{{/U}}。
∙A.找出数据结构的合理性
∙B.找出算法中输入和输出之间的关系
∙C.分析算法的易懂性和可靠性
∙D.分析算法的效率以求改进
(分数:
2.00)
A.
B.
C.
D. √
解析:
35.在数据结构中,从逻辑上可以把数据结构分成{{U}}{{/U}}。
∙A.动态结构和静态结构
∙B.线性结构和非线性结构
∙C.集合结构和非集合结构
∙D.树状结构和图状结构
(分数:
2.00)
A.
B. √
C.
D.
解析:
二、{{B}}填空题{{/B}}(总题数:
15,分数:
26.00)
36.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD。
#include<iostream.h>usingnamespacestd;classA{public:
A(){cout<<'A';}};classB:
______{public:
B(){cout<<'B';}};classC:
______{public:
C(){cout<<'C';}};classD:
publicB,publicC{public:
D(){cout<<'D';}};voidmain(){Dobj;}
(分数:
2.00)
填空项1:
__________________ (正确答案:
VirtualpublicAVirtualpublicA)
解析:
[解析]本题考查虚基类的应用。
通过虚基类所派生的类,在所产生的对象中,只包含了一个和其他类共享的基础对象,也就是说,从同一个基类中以虚拟方式派生的所有类,在它们所产生的对象里,不会有一份基础对象,而只是在内存里保留一份基础对象,而派生类中只保留指向此基础对象的指针,这样就不会同时有两份基础对象的情形发生。
题中程序最后字符A只输出了一次,所以类A必须为类B和类C的虚基类。
37.阅读下列程序:
#include<iostream.h>voidfun(intn){intx(5);staticinty(10);if(n>0){++x;++y;cout<<x<<","<<y<<endl;}}voidmain()intm
(1);fun(m);}则该程序的输出结果是______。
(分数:
2.00)
填空项1:
__________________ (正确答案:
6,11)
解析:
[解析]由主函数mian入手,首先定义变量m等于1,然后调用fun函数。
fun函数中y为静态数值,等于10,作用域为到本文件结束。
所以y加1后,主函数中y的值也为11。
其中函数中x的加1运算调用的是函数中的x等于5的变量,作用域为由定义到文件结束,即主函数中输出的x值为6。
所以答案为6,11。
38.请按下面注释的提示,将类B的构造函数定义补充完整。
classA{inta;public:
A(intaa=0){a=aa;)};ClassB:
publicA{intb;Ac;public:
//用aa初始化基数A,用aa+1初始化类对象成员cB(intaa):
(b=aa+2)};
(分数:
2.00)
填空项1:
__________________ (正确答案:
A(aa),c(aaq+1)或c(aa+1),A(aa)。
)
解析:
[解析]题中要求用aa初始化基类A,用aa+1初始化类对象成员c,用的初始化列表的形式,即A(aa),c(aa+1)或c(aa+1),A(aa)。
39.在面向对象方法中,类之间共享属性和操作的机制称为