2018年9月计算机二级C++考试冲刺必做题及答案(2)
一、选择题(每小题1分,共40分)
1 [单选题] 有如下程序:
运行后的输出结果是( )。
A.3
B.5
C.6
D.编译出错
参考答案:C
参考解析:
题意中,add()函数接收3个double类型的参数,最后一个形参e具有默认值1,函数将三个参数相加,返回相加的结果;main()函数中,调用add()函数,传人两个参数,所以形参c使用默认值1,对应参数的值为:2,3,1,函数将a、b、c转换为double类型后,相加,并将结果6.0作为函数值返回,返回值转换为int赋给result,最终输出result的值。本题答案为C选项。
2 [单选题] 下列关于类定义的说法中,正确的是( )。
A.类定义中包括数据成员和函数成员的声明
B.类成员的缺省访问权限是保护的
C.数据成员必须被声明为私有的
D.成员函数只能在类体外进行定义
参考答案:A
参考解析:
类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。
3 [单选题] 必须用一对大括号括起来的程序段是( )。
A.switch语句中的case标号语句
B.if语句的分支
C.循环语句的循环体
D.函数的函数体
参考答案:D
参考解析:
本题考查C++基本控制结构,A、B、C三个选项中的大括号不是必须的,而D选项中的函数体必须使用大括号。
4 [单选题] 计算数列第n项的函数定义如下:
若执行函数调用表达式fa(4)时,返回的函数值为( )。
A.53
B.17
C.23
D.49
参考答案:A
参考解析:
题意中fa()函数是一个递归函数,当参数n大于1时,函数返回值为3*fa(n-1)+2,当n等于1时,函数返回值为1,所以fa(4)=3*fa(3)+2=3*(3$fa(2)+2)+2=3*(3*(3*fa(1)+2)+2)+2=3*(3*(3+2)+2)+2=53。本题答案为A选项。
5 [单选题] 有如下程序:
运行时的输出结果是( )。
A.Book:C++
B.Book:Unknown
C.Unknown:C++
D.Unknown:Unknown
参考答案:A
参考解析:
C++中,多态调用必须满足两个条件:被调用的成员函数是虚函数;必须通过基类类型的引用或指针进行函数调用。 题意的main()函数中首先定义一个Book类对象,对象名为book,在构造book对象时,程序过程如下:首先调用Book类的构造函数,传人参数“C++”,在构造函数执行函数体前,再调用基类Publication的默认构造函数:传入字符串“C++”,基类构造函数在成员初始化列表中,使用传人的参数“C++”为name赋值;此时继承于基类的成员:name存放字符串“C++”。
然后main()函数调用showPublication()函数,传人book对象:showPublication()函数接收Publication类对象的引用p,然后调用p.getType()和p.getName()输出。由于getType()成员函数属于虚函数,p属于基类对象的引用,所以通过p调用getType()函数满足多态调用,执行p实际引用对象类型的getType(),即Book类的getType(),输出:“Book”;而getName()不是成员函数,所以不满足多态调用,执行基类的成员函数getName(),输出name:“c++”。综上,程序输出:Book:C++。本题答案为A选项。
6 [单选题] 有如下程序:
执行这个程序的输出结果是( )。
A.375
B.357
C.0375
D.0357
参考答案:C
参考解析:
本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个对象d1,先执行基类的构造函数输出0,再执行派生类的构造函数输出3,然后定义了一个对象d2(5,7),其中需要调用基类的构造函数输出7,最后输出5,所以答案为C。
7 [单选题] 软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。
A.学生成绩管理系统
B.C语言编译程序
C.UNIX操作系统
D.数据库管理系统
参考答案:A
参考解析:
软件按功能可以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统都属于系统软件。所以B、C、D都是系统软件,只有A是应用软件。
8 [单选题] 下列程序的运行结果是( )。
A.00
B.23
C.34
D.25
参考答案:B
参考解析:
本题考查的是对构造函数的掌握,另外“++”运算符是右结合的,所以在进行输出的时候都是先把原来的输出后再自加1。
9 [单选题] 关系数据模型的三个组成部分中不包括( )。
A.关系的完整性约束
B.关系的数据操纵
C.关系的数据结构
D.关系的并发控制
参考答案:D
参考解析:
关系数据模型的三个组成部分:数据结构,操作集合(数据操纵),完整性约束。故本题答案为D选项。
10 [单选题] 关于函数重载,下列叙述中错误的是( )。
A.重载函数的函数名必须相同
B.重载函数必须在参数个数或类型上有所不同
C.重载函数的返回值类型必须相同
D.重载函数的函数体可以有所不同
参考答案:C
参考解析:
所谓函数重载是指同一个函数名可以对应多个函数的实现。每种实现对应一个函数体,这些函数的名字相同,其参数类型或个数不同,但不能出现函数返回值类型不同而参数类型和个数完全相同的重载。所以本题答案为C。
11 [单选题] 有如下程序:
运行后的输出结果是( )。
A.2351
B.2531
C.5354
D.5534
参考答案:B
参考解析:
main()函数中调用了B的构造函数,参数为5,接下来B类对象b的构造过程如下:①调用基类A的默认构造函数,构造对象b的基类部分:初始化m_i为2。②按照B类中成员的定义顺序,使用成员初始化列表初始化两个A类成员:首先执行m_a1(m_i+1),m_i为基类A中的成员,此时值为2,调用A类的默认构造函数,初始化m_a1.m_i为3;然后执行m_a2(n),调用A类的默认构造函数,初始化m_a2.m_i为5。接着main()执行return语句,此时对象b需要调用析构函数进行释放,释放过程如下:①首先运行B类的析构函数-B(),输出m_i的值为2,然后将m_i自减1,使得m_i的值为1。②按照8类中成员定义顺序的反顺序,首先调用m_a2的析构函数~A(),释放对象m a2,输出m_a2.m_i的值5;再调用m_a1的析构函数~A(),释放对象m_a1,输出m_a1.m_i的值3。③最后调用基类A的析构函数-A(),释放b对象中的基类部分,输出m_i的值1。 由上分析,程序运行结果为:2531。故本题答案为B选项。
12 [单选题] 有如下程序段:
上述程序使得derived对象中的动态内存空间有可能不被释放,有内存泄漏风险,原因是( )。
A.base类是抽象类
B.derived类的析构函数没有释放基类的动态内存
C.base类的析构函数不是虚函数
D.derived类的resoulce与公有继承得到的resource同名
参考答案:C
参考解析:
基类base中的数据成员resource为整型指针变量,派生类derived中的数据成员resource与基类base中的同名,但类型为浮点型指针变量,基类base中构造函数使用new为resource(整型指针)分配了内存空间,在析构函数中释放;派生类derived的构造函数在成员初始化类表中调用base的构造函数构造对象的基类部分,然后在构造函数体内使用new为resource(浮点型指针)分配了内存空间,在析构函数中释放浮点型resource指针;由于基类base中的析构函数未定义为虚函数,所以派生类derived中的析构函数在被调用时,不会再调用基类base中的析构函数,导致基类base中的整型指针变量resource无法释放,造成内存泄漏。故本题答案为C选项。
13 [单选题] 下列关于抽象类的叙述中,错误的是( )。
A.不能定义抽象类对象
B.抽象类中一定包含纯虚函数
C.抽象类的派生类一定不是抽象类
D.抽象类的构造函可以是protected函数
参考答案:C
参考解析:
含有一个或多个纯虚函数的类是抽象类,不能创建抽象类的对象,选项A、B正确;由于无法创建(也不需要创建)抽象类的对象,所以抽象类的构造函数可以是protected函数,选项D正确;抽象类的派生类,如果也包含纯虚函数,那么该派生类也是抽象类,选项C错误。故本题答案为C选项。
14 [单选题] 一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是( )。
A.一对一
B.一对多
C.多对多
D.多对一
参考答案:C
参考解析:
因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。
15 [单选题] 有如下程序:
执行这个程序的输出结果是( )。
A.1B
B.1D
C.2B
D.2D
参考答案:B
参考解析:
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,本题中定义了一个指向派生类对象的基类指针ptr,执行ptr->output后,会执行基类的output函数,输出1,由于Print是虚函数,所以ptr->Print()会执行派生类的Print,即输出D,所以本题答案为B。
16 [单选题] 层次型、网状型和关系型数据库划分原则是( )。
A.记录长度
B.文件的大小
C.联系的复杂程度
D.数据之间的联系方式
参考答案:D
参考解析:
层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。
17 [单选题] C++中的模板包括( )。
A.对象模板和函数模板
B.对象模板和类模板
C.函数模板和类模板
D.变量模板和对象模板
参考答案:C
18 [单选题] 现有表示患者和医疗的关系如下:P(P#,Pn,Pg,By),其中P#为患者编号,Pn为患者姓名,Pg为性别,By为出生日期,Tr(P#,D#,Date,Rt),其中D#为医生编号,Date为就诊日期,Rt为诊断结果。检索在1号医生处就诊的病人姓名的表达式是( )。
参考答案:A
参考解析:
π表示投影运算,针对属性;σ表示选择运算,针对元组;▷◁表示自然连接。首先在Tr表中选择D#为1的记录σD#=1(Tr),并检索这些记录中患者的编号πp#(σD#=1(Tr)),检索结果与表P进行自然连接生成中间表计πP#(σD#=1(Tr))▷◁P,最后在中间表中检索患者的姓名πPn(πP#(σD#=1(Tr))▷◁P)。故本题答案为A选项。
19 [单选题] 下列选项中不属于结构化程序设计原则的是( )。
A.可封装
B.自顶向下
C.模块化
D.逐步求精
参考答案:A
参考解析:
结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。
20 [单选题] 已知函数模板定义如下:
不能由该函数模板得到的函数实例是( )。
A.int min(int,int)
B.char min(char,char)
C.double min(int,double)
D.double min(double,double)
参考答案:C
参考解析:
题意中的模板函数min()接收两个参数,参数类型都是T,返回一个T类型的值,所以min()函数的参数、返回值都必须是同一类型,由此可知选项A、B、D可正确得到函数实例,选项C不可以。故本题答案为C选项。
21 [单选题] 某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)( )。
A.3
B.4
C.6
D.7
参考答案:D
参考解析:
根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。
22 [单选题] 如下函数模板:
templateT square(T x){return x*x;}
其中T是( )。
A.函数形参
B.函数实参
C.模板形参
D.模板实参
参考答案:C
参考解析:
本题考查模板函数的基本概念,根据模板函数的定义,T是模板形参,所以答案为C。
23 [单选题] 下列运算符中,可以重载为非成员函数的是( )。
A.=
B.>>.
C.[]
D.( )
参考答案:B
参考解析:
赋值操作符=、下标操作符[]和箭头操作符->必须定义为类成员函数,而输入输出操作符可以定义为非成员函数。故本题答案为B选项。
24 [单选题] 有如下程序:
运行后的输出结果是( )。
A.5:4 20.52
B.5:4 20:52
C.5,4 20,52
D.5,4 20:52
参考答案:A
参考解析:
c++中,eonst对象只能使用eonst成员函数,非eonst对象可以使用任一成员;题意中两个print()函数属于基于cons|的重载函数,所以对于非eonst对象a,调用非eonst的成员函数print(),输出:5:4;对于cons|对象b,输出:20,52。故本题答案为A选项。
25 [单选题] 下列有关指针的操作中,正确的是( )。
A.int a=10;void*ptr=&a;cout<<*(ptr);
B.int * ptr=new int[10];delete ptr;
C.i.t Array[4];*(Array+3)=10;
D.int*ptr=new int*[10];
参考答案:C
参考解析:
变量a是整型,所以地址为整型指针,不能赋给void*类型,选项A错误;使用new分配数组空间时,必须使用delete[]来释放数组空间,选项B错误;new int$[10]是分配了l0个整型指针数组,数组的每个元素都是整型指针,它无法赋给整型指针变量ptr,选项D错误。本题答案为C选项。
26 [单选题] 有如下程序:
执行这个程序的输出结果是( )。
A.CCCC
B.CCC
C.CC
D.C
参考答案:B
参考解析:
本题考查类的析构函数,题目中定义了类的一个对象a,对象指针*b,对象数组d[2],当程序执行完后,析构函数执行了3次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为B。
27 [单选题] 下列符号中能够作为C++标识符的是( )。
A.const
B.2a
C._shape
D.-count
参考答案:C
参考解析:
本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项A是关键字,选项B不能以数字开头,选项D包含了字符”-”,且不能以此字符开头。故答案为C。
28 [单选题] 下列关于运算符函数的描述中,错误的是( )。
A.运算符函数的名称总是以operator为前缀
B.运算符函数的参数可以是对象
C.运算符函数只能定义为类的成员函数
D.在表达式中使用重载的运算符相当于调用运算符重载函数
参考答案:C
参考解析:
运算符函数可以定义为类的友元函数。所以C选项错误。
29 [单选题] 如果派生类以protected方式继承基类,则原基类的protected成员和public成员在派生类中的访问属性分别是( )。
A.public和public
B.public和protected
C.protected和public
D.protected和protected
参考答案:D
参考解析:
本题考查保护继承中派生类对基类的访问属性,在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有,所以本题答案为D。
30 [单选题] 当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( )。
A.公有成员
B.私有成员
C.保护成员
D.友元
参考答案:B
参考解析:
C++中,对于公有继承,基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的proteeted成员,基类的private成员对派生类不可见,所以:在公有继承中,基类中的公有成员对派生类对象可见,基类中的私有成员对派生类对象不可见;对于私有继承,基类的public和protected成员在派生类中为private成员,基类的private成员对派生类不可见,选项B正确。本题答案为B选项。
31 [单选题] 有如下枚举类型定义:
enum DAY{SUN,MON=10,TUE,WED,THU,FRI=20,SAT};
执行下列程序段
输出字符'a'的个数是( )。
A.13
B.16
C.19
D.22
参考答案:A
参考解析:
枚举类型中,如果当前枚举成员的值显示初始化,那么后一个枚举成员的值比当前枚举成员的值大1,所以枚举类型DAY中,SUN的值为0,NON的值显示为10,TUE的值为11,WED的值为12,THU的值为13,FR1的值显示初始化为20,SAT的值为21,所以for循环会执行13次,输出13个字符'a'。本题答案为A选项。
32 [单选题] 要建立文件流并打开当前目录下的文件file.dat用于输入,下列语句中错误的是( )。
A.ifstream fin=ifstream.open(”file.dat”);
B.ifstream*fin=new ifstream(”file.dat”);
C.ifstream fin;fin.open(”file.dat”);
D.ifstream*fin=new ifstream( );fin->open(”file.dat”);
参考答案:A
参考解析:
本题考查对文件流输入的操作,可以调用文件流的成员函数pen,一般形式如下:文件流对象.open(磁盘文件名,输入/输出方式)。根据以上格式,可以判断A选项错误。
33 [单选题] 下列有关继承和派生的叙述中,正确的是( )。
A.派生类不能访问基类的保护成员
B.作为虚基类的类不能被实例化
C.派生类应当向基类的构造函数传递参数
D.虚函数必须在派生类中重新实现
参考答案:C
参考解析:
派生类可以访问基类的保护成员,而不能访问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重新实现,那么仍然使用基类的成员函数。
34 [单选题] 已知Value是一个类,value是Value的一个对象。下列以非成员函数形式重载的运算符函数原型中,正确的是( )。
A.Value operator+(Value v,int i);
B.Value operator+(Value v=value,int i);
C.Value operator+(Value v,int i=0);
D.Value operator+(Value v=value,int i=0);
参考答案:A
参考解析:
本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为A。
35 [单选题] 下列关于虚函数的说明中,正确的是( )。
A.从虚基类继承的函数都是虚函数
B.虚函数不得是静态成员函数
C.只能通过指针或引用调用虚函数
D.抽象类中的成员函数都是虚函数
参考答案:B
参考解析:
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public。如果一个类包含了纯虚函数,称此类为抽象类。所以本题答案为B。
36 [单选题] 有如下程序:
执行这个程序的输出结果是( )。
A.1111
B.1211
C.1112
D.1212
参考答案:C
参考解析:
本题主要考察虚函数。虚函数指在某基类中声明为viltual并在一个或多个派生类中被重新定义的成员函数,本题中定义类GA的对象a,执行show(a)、display(a),输出11,定义了类GB的对象b,执行show(b),仍然输出1,display(b)执行会调用派生类的f函数,因为f函数为虚函数,输出2,所以本题答案为C。
37 [单选题] 一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是( )。
A.1:1联系
B.1:m联系
C.m:1联系
D.m:n联系
参考答案:D
参考解析:
因为一个教师可讲授多门课程,而一门课程又能由多个老师讲授,所以他们之间是多对多的关系,可以表示为m:n。
38 [单选题] 下列关于类模板的模板参数的叙述中,错误的是( )。
A.模板参数可以作为数据成员的类型
B.模板参数可以作为成员函数的返回类型
C.模板参数可以作为成员函数的参数类型
D.模板参数不能作为成员函数的局部变量的类型
参考答案:D
参考解析:
本题考查类模板的概念和定义,模板参数可以作为成员函数的局部变量的类型。
39 [单选题] 下面对于友元函数描述正确的是( )。
A.友元函数的实现必须在类的内部定义
B.友元函数是类的成员函数
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员
参考答案:C
参考解析:
友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。
40 [单选题] 有如下程序:
已知其执行后的输出结果为:
Base::fun
Derived::fun
则程序中下画线处应填入的语句是( )。
A.Base.fun( );
B.Base::fun( );
C.Base->fun( );
D.fun( );
参考答案:B
参考解析:
本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。本题中想要输出Base::fun,则必须调用基类的公用成员函数fun,所以使用Base::fun();来调用基类的成员函数fun。
编辑推荐:
温馨提示:因考试政策、内容不断变化与调整,长理培训网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长理培训)
点击加载更多评论>>