最新全国计算机等级考试二级c++题库3共17套.docx
《最新全国计算机等级考试二级c++题库3共17套.docx》由会员分享,可在线阅读,更多相关《最新全国计算机等级考试二级c++题库3共17套.docx(30页珍藏版)》请在冰豆网上搜索。
![最新全国计算机等级考试二级c++题库3共17套.docx](https://file1.bdocx.com/fileroot1/2023-2/10/4f029d33-9cd2-467c-b51d-349dfa6b75d5/4f029d33-9cd2-467c-b51d-349dfa6b75d51.gif)
最新全国计算机等级考试二级c++题库3共17套
最新全国计算机等级考试二级c++题库3(共17套)
6第三套
1、在面向对象方法中,实现信息隐蔽是依靠______。
A、对象的继承
B、对象的多态
C、对象的封装
D、对象的分类
信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
故本题答案为C。
2、下列叙述中正确的是______。
A、为了建立一个关系,首先要构造数据的逻辑关系
B、表示关系的二维表中各元组的每一个分量还可以分成若干数据项
C、一个关系的属性名表称为关系模式
D、一个关系可以包括多个二维表
为了建立一个关系,首先要指定关系的属性,所以选项A是错误的。
表示关系的二维表中各元组的每一个分量必须是不可分的基本数据项,所以选项B是错误的。
在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系,所以选项D是错误的。
一个关系的属性名表称为该关系的关系模式,其记法为:
<关系名>(<属性名1>,<属性名2>,…,<属性名n>)。
故本题答案为C。
3、下列叙述中,不符合良好程序设计风格要求的是______。
A、程序的效率第一,清晰第二
B、程序的可读性好
C、程序中要有必要的注释
D、输入数据前要有提示信息
要形成良好的程序设计风格,主要应注重和考虑下述一些因素:
符号名的命名应具有一定的实际含义,以便于对程序功能的理解;正确的注释能够帮助读者理解程序;程序编写应优先考虑清晰性,除非对效率有特殊要求,程序编写要做到清晰第一,效率第二。
故本题答案为A。
4、一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为______。
A、219
B、221
C、229
D、231
二叉树的性质3:
在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
本题中度为2的结点数为70-1=69,该二叉树中的总结点数为70+80+69=219。
故本题答案为A。
5、冒泡排序在最坏情况下的比较次数是______。
A、n(n+1)/2
B、
C、n(n-1)/2
D、n/2
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
假设线性表的长度为n,则在最坏的情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。
故本题答案为C。
MyClassobj2(20);
obj1.Print();
obj2.Print();
return0;
}
程序的输出结果是______。
A、val=10const:
val=20
B、const:
val=10const:
val=20
C、const:
val=10val=20
D、val=10val=20
本题考查的是构造函数调用顺序。
constMyClassobj1(10);首先定义了MyClass的const对象obj1,并初始构造函数参数为x=10。
构造函数通过:
val(x)将x的值给val。
MyClassobj2(20);定义MyClass的对象obj2,并初始构造函数参数为x=20。
构造函数通过:
val(x)将x的值给val。
obj1.Print();调用Obj1对象中的Print()函数,输出obj1对象成员变量val的当前值,即输出const:
val=10。
obj2.Print();调用Obj2对象中的Print()函数,输出obj2对象成员变量val的当前值,即输出const:
val=20。
故本题答案为B。
15、有如下程序:
#include
usingnamespacestd;
classBase{
public:
voidoutput(){cout<<1;}
virtualvoidPrint(){cout<<'B';}
};
classDerived:
publicBase{
public:
voidoutput(){cout<<2;}
voidPrint(){cout<<'D';}
};
intmain(){
Base*ptr=newDerived;
ptr->output();
ptr->Print();
deleteptr;
return0;
}
程序的输出结果是______。
A、1B
B、1D
C、2B
D、2D
本题考查的是虚函数。
virtualvoidPrint(){cout<<'B';}表示这方法是虚函数,虚函数的意思是如果子类有继承这虚函数,则子类的对象在执行此方法时调用子类的此方法。
否则会调用基类的此方法。
在此程序中Derived是子类,Base是基类,Base*ptr=newDerived;创建一个子类的对象给基类的指针对象。
ptr->output();因为指针ptr是基类的对象。
所以在执行output()方法时会调用基类的output()方法,也就是Base类的output()方法。
不会调用Derived类的output()方法,因为output()不是虚函数。
输出1。
ptr->Print();因为Print();在基类Base中申明是虚函数,所以在子类中如果有继承此方法就会调用子类的这方法。
所以这个调用的是Derived类的Print();方法。
输出D。
故本题答案为B。
16、必须用一对大括号括起来的程序段是______。
A、switch语句中的case标号语句
B、if语句的分支
C、循环语句的循环体
D、函数的函数体
本题考查的是函数的函数体。
由一对花括号括起来的<函数体>是语句的序列,它定义了函数应执行的具体操作。
if语句的分支和循环语句的循环体通常使用花括号{}括起来;switch语句中的case标号语句后加的是冒号":
"。
故本题答案为D。
17、下列关于运算符重载的描述中,正确的是______。
A、运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符
B、一元运算符只能作为成员函数重载
C、二元运算符重载为非成员函数时,参数表中有一个参数
D、C++中可以重载所有的运算符
本题主要考查了运算符重载。
一元运算符还可以作为全局函数重载,所以选项B错误。
二元运算符重载为非成员函数时,参数表中有两个参数,所以选项C错误。
有些运算符不能被重载,如域运算符(:
:
),条件运算符(?
:
)等,具体哪些运算符不能被重载与编译器有关,所以选项D错误。
故本题答案为A。
18、C++中的模板包括______。
A、对象模板和函数模板
B、对象模板和类模板
C、函数模板和类模板
D、变量模板和对象模板
本题考查的是C++中的模板,包括函数模板和类模板。
函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。
类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型。
故本题答案为C。
19、如果利用C++流进行输入输出,下面的叙述中正确的是______。
A、只能借助于流对象进行输入输出
B、只能进行格式化输入输出
C、只能借助于cin和cout进行输入输出
D、只能使用运算符>>和<<进行输入输出
本题考查的是C++流的概念。
就像C语言一样,C++语言中也没有输入/输出语句。
在C++中,将数据从一个对象到另一个对象的流动抽象为"流",数据的输入与输出就是通过输入/输出流来实现的。
C++流可以借助于cin、cout、cerr、clog进行输入输出;使用运算符">>"、"<<"和get()、getline()、put()、write()函数也可以进行输入输出。
故本题答案为A。
20、在函数中,可以用auto、extern、register和static这四个关键字中的一个来说明变量的存储类型,如果不说明存储类型,则默认的存储类型是______。
A、auto
B、extern
C、register
D、static
本题考查的是C++的变量类型。
C++中的变量类型分为如下几种:
auto--函数内部的局部变量。
(auto可以省略不写)一个局部变量如果没有用于存储类别定义符说明时,则自动被说明为auto。
static--静态存储分配,又分为内部和外部静态。
extern--全部变量(用于外部变量说明)。
register--变量存储在硬件寄存器中。
故本题答案为A。
21、下列符号中不属于C++关键字的是______。
A、friend
B、namespace
C、continue
D、byte
本题考查的是C++关键字。
关键字也称保留字,它是由C++语言本身预先定义好的一类单词。
详细请见C++关键字表。
故本题答案为D。
22、有如下头文件:
intf1();
staticintf2();
classMA{
public:
intf3();
staticintf4();
};
在所描述的函数中,具有隐含的this指针的是______。
A、f1
B、f2
C、f3
D、f4
本题考查的是this指针。
this指针式一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。
当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。
this指针是指向对象本身的指针,它只存在于类的非静态成员中。
f1,f2不是成员函数,不存在隐含指针;f4为静态成员函数,也不含有this指针;含有this指针的函数在调用时按thiscall调用约定调用。
故本题答案为C。
23、下列各组类型声明符中,含义相同的一组是______。
A、unsignedlongint和long
B、signedshortint和short
C、unsignedshort和short
D、shortint和int
本题考查的是符号常量声明。
整型常量除包括基本整型(int)外,还包括短整型(shortint)、长整型(longint)、无符号型(unsigned)。
若整型常量为无符号型则在表示时需要在前面加上unsigned,若没加unsigned则默认表示为有符号型(signed),因此选项A、C错误;
选项D中int表示整型,shortint表示短整型,含义不同,所以错误;
选项B表示有符号的短整型,有符号(signed)可以隐藏,同时shortint可以表示为short,因此选项B正确。
故本题答案为B。
24、有以下程序:
#include
usingnamespacestd;
classB{
public:
virtualvoidshow(){cout<<"B";}
};
classD:
publicB{
public:
voidshow(){cout<<"D";}
};
voidfun1(B*ptr){ptr->show();}
voidfun2(B&ref){ref.show();}
voidfun3(Bb){b.show();}
intmain(){
Bb,*p=newD;
Dd;
fun1(p);
fun2(b);
fun3(d);
return0;
}
程序运行的输出结果是______。
A、BBB
B、BBD
C、DBB
D、DBD
本题考查的是虚函数的用法,及虚函数被继承后的相互调用关系。
首先通过B类生成b对象,通过B类生成*p对象指针并申请D类内存结构赋给*p。
然后通过D类生成d。
调用fun1函数,参数地址传递p指针地址。
因为B.show()是虚函数,所以调用D.show();输出D。
调用fun2函数,参数引用传递对象b,所以调用B.show();输出B。
调用fun3函数,参数对象d;参数b=d地址。
所以调用B.show();输出B。
所以输出结果DBB。
故本题答案为C。
25、若有如下类定义:
classB{
voidfun1(){}
protected:
doublevar1;
public:
voidfun2(){}
};
classD:
publicB{
protected:
voidfun3(){}
};
已知obj是类D的对象,下列语句中不违反类成员访问控制权限的是______。
A、obj.fun1();
B、obj.var1;
C、obj.fun2();
D、obj.fun3()
本题考查的是类成员的访问控制。
类中提供了3中访问控制权限:
公有(public)、私有(private)和保护(protected)。
B类中成员定义访问权限为:
fun1()为私有,var1为保护,fun2为公共类D公共继承B类结构,继承结构不改变成员权限。
因为对象外部调用成员,只能访问(公共)Public权限成员,仅fun2()为Public权限。
故本题答案为C。
26、有如下程序:
#include
usingnamespacestd;
classPart{
public:
Part(intx=0):
val(x){cout<~Part(){cout<private:
intval;
};
classWhole{
public:
Whole(intx,inty,intz=0):
p2(x),p1(y),val(z){cout<~Whole(){cout<private:
Partp1,p2;
intval;
};
intmain(){
Wholeobj(1,2,3);
return0;
}
程序的输出结果是______。
A、123321
B、213312
C、213
D、123123
本题考查的是类以及类的构造函数。
classWhole{
public:
Whole(intx,inty,intz=0):
p2(x),p1(y),val(z){cout<~Whole(){cout<private:
Partp1,p2;//定义时间的顺序跟那个
intval;
};
在定义类Whole的私有成员时,Partp1,p2;定义对象p1在p2前。
所以在执行Whole(intx,inty,intz=0):
p2(x),p1(y),val(z){cout<Wholeobj(1,2,3);创建Whole类对象obj这时调用Whole类的构造方法Whole(intx,inty,intz=0):
p2(x),p1(y),val(z){cout<p2(x),p1(y),val(z)方法,因为对象p1在p2定义前,所以先构造对象p1也就执行p1
(2),调用Part类的Part(intx=0):
val(x){cout<(1)输出1。
再执行val(z)给val赋值为3再执行方法体的语句cout<现在所有对象构造完了,开始析构对象了。
因为析构与构造相反,所以先析构z再p2再p1,输出为312。
总体输出就是213312。
故本题答案为B。
27、有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(){++count;}
~MyClass(){--count;}
staticintgetCount(){returncount;}
private:
staticintcount;
};
intMyClass:
:
count=0;
intmain(){
MyClassobj;
cout<MyClass*ptr=newMyClass;
cout<:
getCount();
deleteptr;
cout<:
getCount();
return0;
}
程序的运行结果是______。
A、121
B、232
C、221
D、122
本题考查的是类的构造函数。
intMyClass:
:
count=0;的意思是初始化静态变量count=0;
MyClassobj;是指创建类MyClass对象obj,这时会执行类MyClass的构造方法MyClass(){++count;},得到count=1,cout<MyClass*ptr=newMyClass;创建类MyClass指针对象*ptr,这时会执行类MyClass的构造方法MyClass(){++count;}得到count=2,cout<:
getCount();输出2。
deleteptr;删除指针对象,这时会调用析构方法~MyClass(){--count;},得到count=1,cout<:
getCount();输出1。
故本题答案为A。
28、有以下程序:
#include
usingnamespacestd;
classBase{
public:
Base(intx=0){cout<};
classDerived:
publicBase{
public:
Derived(intx=0){cout<private:
Baseval;
};
intmain(){
Derivedd
(1);
return0;
}
程序的输出结果是______。
A、0
B、1
C、01
D、001
本题考查的是类的相关知识。
"Baseval;"因为类Derived有个Base类的对象val为私有变量。
所以在给这类创建对象时会创建Baseval;对象。
在Derivedd
(1);创建对象d时先创建Base的对象val,执行Base类的Base(intx=0){cout<接着创建类Derived对象d执行类Derived的带一个参数的构造方法Derived(intx=0){cout<执行完基类的构造方法后执行自已的构造方法。
因为传的参数为1所以输出1。
故本题答案为D。
29、对于一个类定义,下列叙述中错误的是______。
A、如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数
B、如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数
C、如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数
D、如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数
本题考查的是类的定义。
类是一种用户自定义的类型,声明一个类对象时,编译程序需要为对象分配存储空间,进行必要的初始化。
在C++中这项工作是由构造函数来完成的。
构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,使该对象具有区别于其他对象特征。
构造函数在对象被创建的时候由系统自动调用。
故本题答案为B。
30、关于函数重载,下列叙述中错误的是______。
A、重载函数的函数名必须相同
B、重载函数必须在参数个数或类型上有所不同
C、重载函数的返回值类型必须相同
D、重载函数的函数体可以有所不同
本题考查的是函数的重载。
函数重载允许用同一个函数名定义多个函数。
被重载的函数必须要有不同的形参列表。
不可以根据函数返回值类型来重载函数。
函数重载是用同一个函数名在不同的参数上做不同的事情。
对于仅仅是函数的返回值不同,其它参数全部相同,不是重载。
如果出现这种况,会在编译产生错误。
故本题答案为C。
31、已知一程序运行后执行的第一个输出操作是
cout<则此操作的输出结果是______。
A、1234
B、******1234
C、**********1234
D、1234******
"setw(10)"表示要输出10个宽度。
"setfill('*')"表示没有达到宽度要求的用*替换。
"1234"表示操作的数据,因此前应该有6个*。
故本题答案为B。
32、如下函数的作用是以双倍行距输出文件:
voiddouble_space(ifstream&f,ofstream&t){
charc;
while(______){
______;
if(c=='\n')t.put(c);
}
}
画线缺失的部分是______。
A、f.get(c)与t.put(c)
B、f.put(c)与t.get(c)
C、t.get(c)与f.put(c)
D、t.put(c)与f.get(c)
本题考查的是文件流的输入输出。
文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。
ifstream是文件输入流类,只能用于输入,它没有提供任何用于输出的操作。
ofstream是文件输出流类,只能用于输出,它没有提供任何用于输入的操作。
fstream是文件输入输出流类。
f.get(c)为获得一个字符;
t.put(c)为输出一个字符,因为if(c=='\n')t.put(c);此句,当c为间格字符(行距字符)时,再多输出一次t.put(c)。
故本题答案为A。
33、派生类的成员函数不能访问基类的______。
A、公有成员和保护成员
B、公有成员
C、私有成员
D、保护成员
本题考查的是继承的类型。
类的继承方式有公有继承、保护继承和私有继承三种方式。
对于公有继承基类中的成员访问属性不变,对于保护和私有继承基类中的成员转换为相应的访问类型。
但是如果基类成员的访问属性为private的,则不能被继承。
故本题答案为C。
34、以下运算符函数中肯定不属于类FunNumber的成员函数的是______。
A、intoperator-(FunNumber);
B、FunNumberoperator-();
C、FunNumberoperator-(int);
D、intoperator-(FunNumbe