国家二级(C++)笔试模拟试卷228(题后含答案及解析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级(C++)笔试模拟试卷228(题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(每小题2分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。

1.具有3个结点的二叉树有( )。

A.2种形态
B.4种形态
C.7种形态
D.5种形态
正确答案:D
2.数据的存储结构是指( )。

A.数据所占的存储空间
B.数据的逻辑结构在计算机中的存放形式
C.数据在计算机中的顺序存储方式
D.存储在计算机外存中的数据
正确答案:B
解析:数据的存储结构,又称为数据的物理结构,是数据的逻辑结构在计算机中的存放形式。

数据的存储结构有顺序结构,链式结构、散列结构和索引结构等。

3.算法分析的目的是
A.找出数据结构的合理性
B.找出算法中输入和输出之间的关系
C.分析算法的易懂性和可靠性
D.分析算法的效率以求改进
正确答案:D
解析:算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。

分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。

4.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是( )。

A.黑箱测试法
B.白箱测试法
C.错误推测法
D.安装测试法
正确答案:A
5.下列叙述中,不属于软件需求规格说明书的作用的是
A.便于用户、开发人员进行理解和交流
B.反映出用户问题的结构,可以作为软件开发工作的基础和依据
C.作为确认测试和验收的依据
D.便于开发人员进行需求分析
正确答案:D
解析:软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段的最后成果,是软件开发中的重要文档之一。

它有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发下作的基础和依据;③作为确认测试和验收的依据。

6.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指
A.模块间的关系
B.系统结构部件转换成软件的过程描述
C.软件层次结构
D.软件开发过程
正确答案:B
解析:软件设计包括软件结构设计、数据设计、接口设计和过程设计。

其中结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。

7.下列关于队列的叙述中,不正确的是( )。

A.在队列中能插入数据
B.在队列中能删除数据
C.队列是先进先出的线性表
D.队列是先进后出的线性表
正确答案:D
解析:队列是指允许在一端进行插入,而在另一端进行删除的线性表。

允许插入的一端称为队尾,允许删除的一端称为队头,所以在队列中既可以插入数据也能删除数据,所以选项A、B是正确的。

在这种数据结构中,最先插入的元素最先能够被删除。

因此队列又称为先进先出的线性表。

答案是D。

8.以下各运算中,不属于算术运算的是( )。

A.大于
B.加
C.乘
D.除
正确答案:A
解析:在一般的计算机系统中,基本的运算和操作有以下4类:算术运算、逻辑运算、关系运算、数据传输。

“大于”属于逻辑运算中的一种。

选项中的加、乘、除都属于算术运算。

9.程序的3种基本控制结构是
A.过程、子过程和分程序
B.顺序、选择和重复
C.递归、堆栈和队列
D.调用、返回和转移
正确答案:B
解析:采用结构化程序设计方法编写程序,可使程序结构良好、易读、易理解、易维护,它包括3种基本控制结构,分别是顺序结构、选择结构和重复结构(又称循环结构)。

注意:控制程序结构的方法和作用。

10.下列特征中不是面向对象方法的主要特征的是()。

A.多态性
B.继承
C.封装性
D.模块化
正确答案:D
解析:面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。

其特点包括分类性、多态性、封装性、模块独立性、继承和多态性等。

模块化是结构化程序设计的特点。

11.有如下函数模板声明:template<typename T>T Max(T a, T B) {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)
正确答案:B
解析:本题考核函数模板的使用。

引用模板函数和引用一般的函数在语法形式上没有任何区别。

所有的类型替换都是编译器在幕后悄悄进行的。

但是要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参。

例如,本题中的B) 选项,
编译系统从第一个参数“3.5”获得的信息是“T对应于double”,而从第二个参数“4”处获得的信息是“T对应于int”,二者相互矛盾,在编译时会产生错误。

对于D) 选项中紧跟在函数名后的<double>就是模板实参表,通过它通知编译系统在调用过程中,int型的参数“4”将被自动换成double型。

12.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的
A.公有成员和私有成员
B.私有成员和保护成员
C.公有成员和保护成员
D.私有成员、保护成员和公有成员
正确答案:C
解析:本题考核派生类的定义和访问权限。

当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类私有成员不可访问。

即基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。

13.下列有关类成员的叙述中,正确的是( )。

A.友元函数是类的成员函数
B.类成员的默认访问权限是私有的
C.类成员函数必须声明为公有的
D.类的静态数据成员不能是常成员
正确答案:B
解析:此题考查的是类成员的有关概念。

类的友元函数可以直接访问该类的所有成员,但它不是类的成员函数,故选项A)错误;类成员函数的访问权限可以声明为公有、保护、私有,故选项C)错误;静态数据成员的声明是使用关键字static,它可以是常成员,故选项D)错误。

14.请阅读以下程序main( ) { int x=1,y=0,a=0,b=0; switch(x) case 1:switch(y){case 0:a++;break;case 1:b++;break;}case 2:a++;b++;break; } cout<<”a=“<<a<<”b=“<<b<<endl; } 上面程序的输出结果是
A.a=2,b=1
B.a=1,b=1
C.a=1,b=0
D.a=2,b=2
正确答案:A
解析:本题考察switch语句的嵌套,以及break语句的使用规则,不再执行下面的case语句,如果没有break语句,则会顺序执行随后语句。

据此,读程序可知,内层switch执行case 0分支,故a增1,跳出内层switch后,由于没有break语句;随后执行外层switch的case 2分支,a又增1,b增1。

故答案为A。

15.下面关于类和对象的描述中,错误的是
A.类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B.类和对象之间的关系是抽象和具体的关系
C.对象是类的实例,一个对象必须属于一个已知的类
D.类是具有共同行为的若干对象的统一描述体
正确答案:A
解析:在C++语言中,类和结构体有本质区别,类中包含数据及操作函数,而结构体只包含有数据。

16.下列程序的输出结果是#include<iostream.h>int b=2; int func(int * a) {b+=* a; return(b) ;} void main( ) { int a=2, res=2; res+=func(&a) ; cout <<res;}
A.4
B.6
C.8
D.10
正确答案:B
解析:在函数体语句b+=* a;中的*是指针运算符(也称间接访问运算符) , * a就是main函数中a的值。

17.将x+y*z中的“+”用成员函数重载,“*”用友元函数重载应写为( )。

A.operator+(operator*(y,z))
B.x.operator+(operator*(y,z))
C.x.operator+(x*(y,z))
D.x+(operator*(y,z))
正确答案:B
解析:在定义了重载运算符后的函数后,函数operator}重载了运算符“+”。

如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友员函数。

“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“*”被改写为“operator*”。

“+”为成员函数重载,x.operator。

所以x+y*z被改写为“x.operator+(operator*(y,z))”。

18.按照标识符的要求,开头的符号不能是( )。

A.大写字母
B.小写字母
C.数字字符
D.下划线
正确答案:C
解析:C++规定,标识符由大小写字母、数字字符和下划线组成,并且以字母或下划线开始。

因此,本题正确答案为C。

19.语句int i=2.8*6; 中整型常量i定义后赋初值的结果是( )。

A.12
B.16
C.17
D.18
正确答案:B
解析:C++中数据类型转换有两种类型,即隐式类型转换和显式类型转换。

隐式类型转换是由编译器自动完成的类型转换;显示类型转换是由程序员显式指出的类型转换。

本题中是隐式类型转换,浮点数转换为整数,是直接取浮点数的整数部分,而不是四舍五入。

故答案为B。

20.下面程序输出的结果是( )。

#include<iostream>using namespace std;int fuc (char *x);int main( ){ cout<<fuc(“hello”)<<endl;return 0;} int fuc(char *x){ char *y=x;while(*y! =‘\0’)y++;return(y-x);} A.5
B.6
C.0
D.语法错误,不能输出结果
正确答案:A
解析:函数fuc( )的功能是计算字符串x的长度,因此程序的输出是5。

21.在基类中有定义的纯虚函数,它要求在派生类中定义,而且基类不能用以说明对象,则该类为( )。

A.虚基类
B.抽象类
C.虚函数类
D.模板类
正确答案:B
解析:类中一旦有纯虚函数的定义那么这个类就再也不能创建此类的对象了,我们把这种类叫做抽象类。

22.有如下类的定义。

横线处的语句是( )。

class MyClass{public:MyClass(int a=0,int b=0){X=a;Y=b;}void Change( )const{X=10;Y+=10;}private:___________________int X,Y;};
A.static
B.const
C.mutable
D.不需要填入内容
正确答案:C
23.在C++语言的数据类型中,int、short等类型的长度是( )。

A.固定的
B.任意的
C.由用户自定义
D.与机器字长有关
正确答案:D
24.语句ofstream f(“SALARY.DAT” , ios::app | los::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且______。

A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,打开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,打开失败;若文件不存在,建立一个新文件
正确答案:B
25.若有定义“int x=10,y=3,z;”,则语句“cout<<(z=(x%y,x/Y));”的输出结果是______。

A.1
B.0
C.4
D.3
正确答案:D
26.下列程序的输出结果是#include”iostream”using namespace std;int Max(int a,int b) { if (a >b) return a;else return b;} void main( ) { int m,n;m=10,n=5;int max=Max(m,n);cout<<max<<endl;}
A.10
B.程序有误
C.1
D.0
正确答案:A
解析:本题函数Max的功能是求出两个整数中的较大者,并且通return语句返回。

注意:return语句的用法,注意return的条件。

27.下列描述中,( )是抽象类的特性。

A.可以说明虚函数
B.可以进行构造函数重载
C.可以定义友元函数
D.不能说明其对象
正确答案:D
28.在C++中,关于下列设置参数默认值的描述中,正确的是( )。

A.不允许设置参数的默认值
B.设置参数默认值只能在定义函数时设置
C.设置参数默认值时,应该是先设置右边的再设置左边的
D.设置参数默认值时,应该全部参数都设置
正确答案:C
29.在C++中,打开一个文件,就是将这个文件与一个( )建立关联,关闭一个文件,就是取消这种关联。

A.类
B.流
C.对象
D.结构
正确答案:B
30.下面程序的运行结果是#include <iostream.h >int fun ( int a[ ],int n) { int result=1;for(int i=1;i<n;i++) result=result*a[i];return result;} void main( ) { int a[3]={3,4,5};cout <<fun(a,
A.12
B.15
C.20
D.60
正确答案:C
解析:for循环执行2次,所以第一次for循环为result=1*a[l]=4,第二次for 循环为result =4*a[2]=20。

31.关于类和对象描述错误的是
A.对象(Object)是现实世界中的客观事物,对象具有确定的属性
B.类是具有相同属性和行为的一组对象的集合
C.对象是类的抽象,类是对象的实例
D.类是对象的抽象,对象是类的实例
正确答案:C
解析:C++中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。

一个类作为一种数据类型,它可以定义多个对象。

32.设有以下定义和程序:#include<iostream.h>classA1 { public:void show1( ) { cout<<”classA1”<<end1;} };classA2:public A1 { public:void show2( ) { cout<<”classA2”<<end1;} };class A3:protected A2 { public:voidshow3( ) { cout<<”class A1”<<end1;} };void main( ) { A1obj1;A2obj2;A3obj3;} 则以下不合语法的调用语句是
A.obj1.show1( );
B.obj2.show1( );
C.obj3.show1( );
D.obj2.show2( );
正确答案:C
解析:本题考核派生类的使用以及访问权限问题。

C++中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。

A2是A1的公有派生类,A3是A2的保护派生类,所以类A1的成员函数show1( )在类A3中呈现保护属性,不能通过A3类的对象访问。

33.友元运算符obj1>obj2被C++编译器解释为( )。

A.operator>(obj1,obj2)
B.>(obj1,obj2)
C.obj2.operator>(obj1)
D.obj1.operator>(obj2)
正确答案:A
34.下列关于虚基类的描述,错误的是
A.设置虚基类的目的是为了消除二义性
B.虚基类的构造函数在非虚基类之后调用
C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用
D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数
正确答案:B
解析:虚基类的引入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数选于非虚基类的构造函数执行。

35.下面有关重载函数的描述中,正确的是()。

A.重载函数必须具有不同的返回值类型
B.重载函数形参个数必须不同
C.重载函数必须具有不同的形参列表
D.重载函数名可以不同
正确答案:C
解析:所谓函数重载是指同一函数名可以对应多个函数实现。

进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。

但函数的返回类型不能作为判断重载的依据。

填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。

注意:以命令关键字填空的必须拼写完整。

36.若串s=“MathTypes”,则其子串的数目是______。

正确答案:46
解析:串s中共有9个字符,由于串中字符各不相同,则其子串中有0个字符的1个(空串),1个字符的9个,2个字符的8个,3个字符的7个,4个字符的6个,5个字符的5个,6个字符的4个,7个字符的3个,8个字符的2个,9个字符的1个,共有1+2+3十4+5+6+7+8+9+1=46。

37.在面向对象方法中,__________描述的是具有相似属性与操作的一组对象。

正确答案:类
解析:在面向对象方法中,把具有相同属性和方法的对象称为类,类是对象的抽象,对象是类的实例。

38.数据流图的类型有【】和事务型。

正确答案:变换型
解析:典型的数据流类型有两种:变换型和事务型,,变换型是指信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统;在很多软件应用中,存在某种作业数据流。

它可以引发一个或多个处理,这此处理能够完成液作业要求的功能,这种数据流就叫做事务。

39..、.*、->、::、?:这五个运算符______重载。

正确答案:不能
40.当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行人队运算。

这种情况称为______。

正确答案:上溢
41.执行下列语句后,变量sum的值是______。

int sum=0; for(int i=1;i <=3;i++) for(int j=1;j<=i;j++) sum++;
正确答案:6
解析:此题考查的是for循环的嵌套。

题目中外循环会循环3次,每次循环变量i的值分别是1、2、3;内循环会循环i次,故3次执行内循环,循环此数分别是1、2、3次。

故最终sum的值为6。

42.在下列的程序的横线处填上适当的语句,使该程序的输出为12。

#include<iostream.h>using namespace std; class Base { public: int a,b; Base(int i){a=i;} }; class Derived:public Base { int a; public: Derived(int x):Base(x),b(x+1){}; void show( ) { ______;//输出基类数据成员a的值。

cout<<b<<endl; } }; void main( ) { Derived d(1); d.show( ); return 0; }
正确答案:cout<<Base::a
解析:此题考查的是基类和派生类的构造函数。

派生类构造函数的执行顺序;首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。

此题要求结果是输出12,分析题目:首先调用基类的构造函数,然后是调用子对象的构造函数,横线处要求输出基类成员a的值,填入cout<<Base::a 即可。

43.已知int DBL (int n){return n+n;}和long DBL (long n){return n+n}是一个函数模板的两个实例,则该函数模板的定义是______。

正确答案:template<class T>T DBL(Tn){return n+n;}
解析:本题考核函数模板的使用。

函数模板的一般说明形式如下:template <类型形参表>返回类型函数名(形参表){//函数体)。

函数调用方式为:函数名(实参表);。

形参表中的类型以实参表中的实际类型为依据。

由此易得答案。

44.下列程序的运行结果是______。

#include<iomanip.h>int Func(int *a,int n) {int s=1;for(int i=0;i<n;i++) s*=*a++;returns;} void main( ) {inta[]:{1,2,3,4,5,6,7,8};intb=Func(a,6)+Func(&a[5],2);cout<<“b=“<(b<<endl;}
正确答案:b=762。

解析:本题考查了。

a++的用法。

*a++作为表达式时,先计算*a作为表达式的值,然后使指针变量a本身增1,在本惠中,s*=*a++等同于3=s**a,a++,
S后面第一个*是乘号。

45.若有定义语句:int x=3,y=2,z=1;,则表达式x<y?x:y的值是__________。

正确答案:2
解析:本题考查的是运算符的优先级。

首先x=3,y=2,判断x<y为否,则取y的值,为2。

46.若要将函数“void FriFun{};”声明为类MyClass的友元函数,则应在类MyClass的定义中加入语句______。

正确答案:friend void FriFun( );
47.以下程序的运行结果是【】。

#include<iostream>#include<string>using namespace std;void main( ){ chara[10]=“China”,b[]=“Chin”,c[]=“ese”;cout<<strlen(strcat(strcpy(a,b),c))<<endl;}
正确答案:7
解析:本题主要考查C++中字符串函数的使用。

strcpy(s1,s2)将s2的内容赋值到s1中;strcat(s1,s2)连接s1和s2两个字符串;strlen(s)返回字符数组s 的长度。

因此最后输出的结果是b和c进行连接后的字符串长度,即7。

48.假定动态分配一个类型为Worker的具有n个元素的数组,并由P指向这个动态数组,如果要释放这个数组,则使用的语句为【】。

正确答案:delete[]p;
解析:语句为delete[]p;。

49.______使一个函数可以定义成对许多不同数据类型完成同一个任务。

正确答案:函数模板
50.模板使我们可以用一个代码段指定一组相关函数(称为______ )或一组相关类(称为______。

正确答案:函数模板、类模板。

相关文档
最新文档