国家二级(C++)笔试模拟试卷139(题后含答案及解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级(C++)笔试模拟试卷139(题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(每小题2分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。
1.算法的时间复杂度是指
A.执行算法程序所需要的时间
B.算法程序的长度
C.算法程序中的指令条数
D.算法执行过程中所需要的基本运算次数
正确答案:D
解析:算法的时间复杂度实际上就是执行算法程序所需要的计算工作量。
为了客观地反映算法性能,在度量算法的时间复杂度时,应该与编写算法程序所使用的程序设计语言、执行算法程序时所使用的计算工具以及程序员的水平无关。
选项A错误,因为同一算法程序在运行速度不同的计算机上运行时,其计算时间是不同的。
选项B错误。
算法所编写的程序长度往往与程序设计语言以及程序员的水平有关,同一个算法,用不同的程序设计语言或者不同的程序员所编写出的程序其长度可能会大不相同.选项C错误,因为根据一个算法所编制出的程序中,其指令条数往往与程序设计语言以及程序员的水平有关,不能用算法程序中的指令条数来度量算法的时间复杂度。
所以,本题的正确答案为D。
2.设栈S的初始状态为空。
元素a,b,c,d,e,f依次通过栈S,若出栈的顺序为b,d,c,f,e,a,则栈S的容量至少应该为
A.3
B.4
C.5
D.6
正确答案:A
解析:根据题中给定的条件,可以作如下的模拟操作:①元素a,b进栈,栈中有2个元素,分别为a,b;②元素b出栈后,元素c,d进栈,栈中有3个元素,分别为a,c,d;③元素d,c出栈后,元素e,f进栈,栈中有3个元素,分别为a,e,f;④最后,元素f,e,a出栈,栈为空。
可以看出,进栈的顺序为a,b,c,d,e,f,出栈的顺序为b,d,c,f,e,a,满足题目要求。
每次进栈操作后,栈中最多有3个元素,所以,为了顺利完成这些操作,栈的容量应至少为3。
本题的正确答案为A。
3.在最坏情况下,下列排序方法中时间复杂度最小的是
A.冒泡排序
B.快速排序
C.插入排序
D.堆排序
正确答案:D
解析:在最坏情况下:冒泡排序需要的比较次数为n(n-1)/2;快速排序需要的比较次数也为n(n-1)/2;插入排序需要的比较次数也为n(n-1)2;堆排序需要比较的次数为O(nlog2n)。
可知,在最坏情况下,堆排序的时间复杂度最小,本题的正确答案为D。
4.在模块化程序设计中,按功能划分模块的原则是
A.各模块的功能尽量单一,且各模块之间的联系尽量的少
B.各模块的功能尽量单一,且各模块之间的联系尽量紧密
C.各模块应包括尽量多的功能
D.各模块应包括尽量多的输入输出操作
正确答案:A
解析:模块化设计是指把一个大程序按人们能理解的大小规模进行分解。
划分模块的基本原则是使每个模块都易于理解。
按照人类思维的特点,按功能来划分模块最为自然。
在按功能划分模块时,要求各模块的功能尽量单一,各模块之间的联系尽量少。
所以,选项A正确;选项B错误;选项C错误。
本题的正确答案为A。
5.数据结构分为逻辑结构和存储结构,下列数据结构中不属于存储结构的是
A.线性链表
B.二叉链表
C.栈与队列
D.循环队列
正确答案:C
解析:线性链表是线性表的链式存储结构;二叉链表是二又树的链式存储结构;栈与队列分别是特殊的线性表;循环队列是队列的一种顺序存储结构。
可知,线性链表、二叉链表、循环队列均属于存储结构,而栈与队列属于逻辑结构。
选项C为正确答案。
6.下列叙述中正确的是
A.软件就是程序清单
B.软件就是存放在计算机中的文件
C.软件应包括程序清单以及运行结果
D.软件包括程序、数据和文档
正确答案:D
解析:计算机软件是计算机系统中与硬件相互依存的另一部分,包括程序、
数据及相关文档的完整集合。
用一个等式表示,则为:软件=程序+文档+数据选项A、B、C错误,正确答案是D。
7.在结构化方法中,软件功能分解属于下列软件开发中的阶段是
A.概要设计
B.需求分析
C.详细设计
D.编程调试
正确答案:A
解析:概要设计的任务是划分出构成系统的各物理元素以及设计出软件的结构(如确定模块及模块间的关系)。
设计过程通常分为以下几步:提出可选择方案;选择合理方案;推荐最佳方案;功能分解;设计软件结构;制定测试计划;最后提交概要设计文档。
软件功能分解属于概要设计阶段。
本题的正确答案为A。
8.下列叙述中正确的是
A.程序设计过程中的主要工作是编制程序
B.程序设计的主要目标是编制出运行结果正确的程序
C.不良的程序设计风格会增加程序的复杂性
D.上述三种说法都不对
正确答案:C
解析:程序设计过程中包括很多步骤,编制程序只是其中的一步。
所以,选项A错误。
程序设计的最终产品是程序,但仅设计和编制出一个运行结果正确的程序是不够的,还应养成良好的程序设计风格。
所以,选项B错误。
程序设计的根本目标是要降低程序的复杂性和提高程序的可读性。
而程序的复杂性主要来自以下两个方面:问题固有的复杂性;不良的设计风格人为增加了程序的复杂性。
所以,良好的设计风格对于降低程序的复杂性是很重要的,并且,好的设计风格是好的程序风格的基本保证。
选项C正确。
9.下列叙述中正确的是
A.用E-R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系
B.用E-R图只能表示实体集之间一对一的联系
C.用E-R图只能表示实体集之间一对多的联系
D.用E-R图表示的概念数据模型只能转换为关系数据模型
正确答案:A
解析:用E-R图可以简单明了地描述实体及其相互之间的联系,用E-R图还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。
所以,选项A正确,选项B与C错误。
为了建立用户所要求的数据库,必须把概念结构(用E-R图表示的概念数据模型)转换为某个具体的数据库管理系统所支持的数据模型,这就是逻辑结构设计所要完成的任务。
在已给定数据库管理系统的情况下,数据库的逻辑设计可以分两步来进行:①将概念模型转换成一般的数据
模型;②将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。
可知,用E-R图表示的概念数据模型不仅能转换为关系数据模型,还可以转换为其他数据模型,如网状模型和层次模型等。
所以,选项D说法错误。
10.关系表中的每一横行称为一个
A.元组
B.字段
C.属性
D.码
正确答案:A
解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。
关系表中的每一横行称为一个元组。
本题的正确答案是A。
11.一个函数为void f(int,charch=‘a’),另一个函数为void f(int),则它们A.不能在同一程序中定义
B.可以在同一程序中定义并可重载
C.可以在同一程序中定义,但不可以重载
D.以上说法均不正确
正确答案:C
解析:本题函数的调用。
只要满足参数列表不同的条件,就可以在同一程序中对同名的函数进行定义。
但是由于其中一个函数有默认值,因此当程序中出现语句“x=f(10);”时,就会产生二义性,不能确定调用函数f(10)还是调用函数f(10,’a’),此时这两个函数不能重载。
12.下面关于对象概念的描述中,错误的是
A.C++中的对象就是C语言中的结构变量
B.对象代表着正在创建的系统中的一个实体
C.对象是一个状态和操作(或方法)的封装体
D.对象之间的信息传递是通过消息进行的
正确答案:A
解析:本题考核对象的概念。
C++中的对象与C语言中的结构变量是不一样的。
对象是某一类类型的变量,而结构变量是结构类型的变量。
同时C++对C 的结构有了扩展,结构可以和类一样使用。
结构除了可以包含数据成员外,还可以包含成员函数;成员也可以加上public、private和protected访问控制;结构之间也可以继承。
两者惟一的不同之处是,结构中的成员默认是公有的,结构的继承默认是公有的,而类的继承默认是私有的,类的成员默认也是私有的.
13.实现运行时的多态性要使用
A.重载函数
B.析构函数
C.构造函数
D.虚函数
正确答案:D
解析:本题考核虚函数的应用。
动态联编一直要到程序运行时才能确定调用哪个函数。
虚函数是实现动态联编的必要条件之一。
没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。
14.若有定义:int k,*q;,则下列各选项中赋值表达式正确的是
A.q=(&k+1)
B.q=&k
C.q=k
D.*q=&k
正确答案:B
解析:本题考核指针的赋值操作。
A) 选项中,&k表示变量k在内存中的地址,而后面的1是整型常量,所以此选项不正确。
C) 选项中,是把整型变量的值直接赋给指针变量q,由于赋值没有兼容性,所以这是错误的。
D) 选项中,企图把k在内存中的地址赋给一个整型变量(*q在此代表一整型变量),这也是不允许的,地址值不能直接转换为一个整数。
15.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
A.模板
B.类
C.对象
D.函数
正确答案:A
解析:本题考核模板的概念。
模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。
16.在进行任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是
A.fail
B.eof
C.bad
D.good
正确答案:B
解析:本题考核C++的输入,输出流。
C++中函数eof( )的作用是进行输入操作时,若到达文件尾返回true,否则返回false。
eof函数只能用于输入流操
作。
17.按照标识符的要求,下列选项中,( )符号不能组成标识符。
A.连接符
B.下划线
C.大小写字母
D.数字字符
正确答案:A
解析:本题考核C++的标识符定义。
C++规定标识符由大小写字母、数字字符(0~9)和下划线组成,并且以字母或下划线开始,后跟0个或多个字母,数字字符或下划线。
由此可知A) 选项中的连接符不能用于组成标识符。
18.已知枚举类型定义语句为:enum Token { NAME,NUMBER,PLUS=5,MINUS,PRINT=10};则下列说法中错误的是
A.枚举常量NAME的值为1
B.枚举常量NUMBER的值为1
C.枚举常量MINUS的值为6
D.枚举常量PRINT的值为10
正确答案:A
解析:本题考核C++数据类型中枚举。
枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。
由此可知枚举常量NAME的值应为0。
所以A) 选项是错误的。
19.以下程序段的输出结果是int x=5;do { cout<<x--<<end1;}while(!x);
A.5
B.无任何输出
C.4
D.陷入死循环
正确答案:A
解析:本题考查循环语句do-while语句的执行情况.根据do-while循环语句功能特点可得:首先无条件执行循环体,表达式x--的值为5,输出为5,x的值变为4,然后检查条件(!x)为假(false),则循环结束。
20.下列数组的定义中,会产生错误的是
A.int a[]=(‘0’,’1’,’2’,’3’,’4’,’5’,’6’);
B.int a[10]={0,1,2,3,4,5,6};
C.char a[5]=“hello”;
D.char a[5]={‘h’,’e’,’1’,’1’,’o’};
正确答案:C
解析:本题考核数组的定义和初始化。
下面逐项进行分析:A) 选项中,数组a的定义和初始化符合数组的定义和初始化语法,故正确:B) 选项中,数组a初始化的值虽然没有10个,但对于少的部分,系统会自动补0,所以B) 选项中数组的定义也是正确;C) 选项中,数组a的长度为5,但字符串“hello”的长度为5+1=6,字符串结束符‘\0’无法存储在数组中,所以是错误的;D) 选项中,数组a的定义是正确的。
21.若有以下程序:# include <iostream>using namespace std;void sub(int x, int y, int *z){ *z = y+x;}int main ( ){ int a,b, c; sub[8,4.&a) ; sub (6, a, &b) ; sub (a.b, &c) ; cout<<a<<” , “<<b<<”, “<<c<<end1; return 0;} 程序运行后的输出结果是
A.12,18,30
B.-12,6,8
C.6,8,10
D.12,-18,16
正确答案:A
解析:本题考核对指针作为函数的参数的理解程度。
分析程序:函数sub为void型。
函数的形参中,z是一个int型的指针变量,因此它只能从实参接收一个int型变量的地址。
在函数sub体中,语句:*z=y +x;的功能是把形参y与x 的和值放入形参z所指的存储单元中。
在主函数中,3次调用sub函数。
第一次调用时,把8和4分别传递给形参x和y,把主函数中变量a的地址传递给形参z,这样形参就指向了主函数中的变量a,在sub函数中执行语句*z=y/x;后,把12放入z所指的存储单元中,即变量a被赋值11。
以此类推,最后b被赋值18,c被赋值30。
所以最后输出是12,18,30。
22.在下面的类定义中,错误的语句是class Sample { public:Sample(int val);//①~Sample( )://②private:int a=2.5;//③Sample( );//④};
A.①②③④
B.②
C.③
D.①②③
正确答案:C
解析:本题考核类的定义。
C++不能类的定义中给数据成员赋初值。
23.下面的描述中表达错误的是
A.公有继承时基类中的public成员在派生类中仍是public的
B.公有继承时基类中的private成员在派生类中仍是private的
C.公有继承时基类中的protected成员在派生类中仍是protected的
D.私有继承时基类中的public成员在派生类中是private的
正确答案:B
解析:C++中,继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。
基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。
所以B) 选项是错误的。
派生类中的成员不能访问基类的中私有成员,但可以访问基类中的公有成员和保护成员。
此时派生类对基类中各个成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性,基类中公有和保护成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员,派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中仍然为保护成员.所以,A) 、C) 和D) 选项都是正确的。
24.运算符函数调用格式的表达式:y/x++与表达式:y. operator/(operator++(x,0))含义相同,由此可看出( )。
A.“/”和“++”都是作为成员函数重载的
B.“/”和“++”都是作为非成员函数重载的
C.“/”是作为成员函数重载的,“++”是作为非成员函数重载的
D.“/”是作为非成员函数重载的,“++”都是作为成员函数重载的
正确答案:C
解析:本题考核运算符的重载。
假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则c1. operator+(c2)与c1+c2含义相同。
如果+作为该类的非成员函数重载,则operator+(c1,c2)与c1+c2含义相同。
所以通过题目给出的两个表达式可看出“/”是作为成员函数重载的,“++”是作为非成员函数重载的。
25.有如下函数模板定义:template<typename T1,int a2,int a3>T1 sum(T1 a1) { return(a1+a2+a3);} 则以下调用中正确的是A.sum<int,4,3>(5);
B.sum<4,3>(5);
C.sum<int,int,int>(5);
D.sum(5);
正确答案:A
解析:本题考核函数模板的使用。
C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。
模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。
题中定义的函数模板中含有常规形参,常规形参的信息无法从模板函数的实参表中获得,因此在调用时必须显式地给出对应于常规参数的模板实参。
注意,sum的第一个模板实参的信息可以从模板函数的实参表中获得,但由于它位于不可省略实参的前面,因此
不能省略,所以只有A选项的调用格式是正确的。
26.有如下程序:#include<iostream>using namespace std;int main( ) { cout. fill(‘*’);cout. width(5);cout<<scientific<<314.15 926535<<end1;return 0;} 程序运行后,输出的结果是
A.3.141593e+002
B.3.1416e+002
C.**3.14e+002
D.314.16
正确答案:A
解析:本题考核格式控制数据的输入输出.函数setfill (char c) 用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满,设置的填充符一直有效,直到再次设置填充字符为止,如题中调用函数setfill(‘*’)将填充字符设置为’*’,后又调用函数setfill(‘#’)将填充字符设置为’#’。
函数setw(int n)用于设置输入输出宽度,当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出,如题中数据314. 15926535的宽度大于5,所以将会按实际输出。
关键字scientific将浮点数按指数格式(科学表示法)输出。
27.假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数。
A.void~MyClass( );
B.~MyClass(int n);
C.MyClass( );
D.~MyClass( );
正确答案:D
解析:本题考核类的析构函数。
在C++中,析构函数名为符号“~”加类名,析构函数没有参数和返回值。
根据以上知识可知,MyClass类的正确析构函数的说明为~MyClass( )。
28.有以下程序:#include <iostream>using namespace std;class sample{private: int n;public: sample( ) {} sample(int m) { n=m; } sample add(sample s1,sample s2) { this->n-s1.n+s2.n; return (*this); void disp( ) { cout <<”n=“<<n<<end1; } };int main (}{ sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp ( ); return 0;}程序运行后,输出的结果是A.n=10
B.n=5
C.n=20
D.n=15
正确答案:D
解析:本题考核this指针的应用。
上述程序中,sample类的add成员函数中使用了this指针,this指针指向当前对象自身,该成员函数中的语句:this->n=s1. n+s2.n;,用于修改当前对象的数据成员n的值,语句:return(*this);用于返回当前对象自身,即对当前对象进行了修改。
对于main( )函数调用add成员函数语句“s3.add(s1,s2);”。
此时,this指针指向的是对象s3,执行该语句前,s3的数据成员n未赋值,执行完该语句后,就修改了s3的私有成员n的值,使其为15。
29.有以下程序:#include <iostream>using namespace std;class sample{private: int x; static int y;public: sample(int a) ; static void print(sample s);};sample:: sample(int a) { x=a; y+=x;}void sample::print(sample s){ cout<<“x=“<<s. x<<”, y=“<<y<<end1;}int sampte::y=0;int main( ){ sample s1(10); sample s2(20); sample::print(s2); return 0;}程序运行后的输出结果是
A.x=10,y=20
B.x=20,y=30
C.x=30,y=20
D.x=30,y=30
正确答案:B
解析:本题考核静态数据成员和静态成员函数的应用。
类sample中定义两个私有成员x和y,其中y为静态数据成员。
并定义函数print( )为静态成员函数。
在主函数中,定义对象s1(10)时,通过构造函数使对象s1的私有成员x=10,静态数据成员y=10。
定义s2(20)时,通过构造函数使对象s2的私有成员x=20,静态数据成员y=10+20=30。
程序最后调用静态成员函数print输出对象s2的私有成员x的值20,对象s1、s2共享的静态数据成员y的值30。
30.若有以下程序:#include<iostream>using namespace std;class A {private: int x;public: int z; void setx(int i) { x=i; } int getx ( ) { return x; }}:class B : public A{private: int m;public: int p; void setvalue(int a, int b, int c) { setx(a) ; z=b; m=c; } void display{) { cout<<getx ( )<<”, “<<z<<”, “<<m<<end1; }};int main( ){ B obj; obj. setvalue(2,3,4); obj.display( ); return 0;} 程序运行以后的输出结果是
A.产生语法错误
B.2,3,4
C.2,2,2
D.4,3,2
正确答案:B
解析:本题考核继承与派生。
当类的继承方式为公有继承时,基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。
其他外部使用者只能通过派生类的对象访问继承来的公有成员。
在
本题中,数据成员z和函数setx都是基类A的公有成员,它们经过公有继承以后,在派生类B中还是公有成员,而派生类B中的函数setvalue和display都是公有成员,可以通过对象对它们进行访问。
所以程序中对各成员的访问是正确的。
本程序的功能是输出已设置的各成员的值。
31.为完成下面的程序,应在划线处填入的语句是#include<iostream >using namespace std;class Base { private:int x;public:Base(int i) {x=i;} ~Base( ){} };class Derived:public Base { public:______ //完成类Derive构造函数的定义};int main( ) { Derived obj;return 0;}
A.Derived(int i):Base(i){}
B.Derived( ){}
C.V oid Derived (int i):Base(i){}
D.Denved(int i){Base(i);}
正确答案:A
解析:本题考核派生类中的构造函数。
程序中,类Derived是基类Base的公有派生。
在类Derived的构造函数应该包括调用基类构造函数使基类的数据成员得以初始化。
32.若有以下程序:#include <iostream>using namespace std;class A { private:int a;public:void seta(int x) { a=x;} void showa( ) { cout<<a<<”,”;} };class B { private:int b;public:void setb (int x) { b=x;} void showb( ) { cout<<b<<”,”;} };class C :public A,private B { private:int c; public: void setc(int x, inc y, int z) { c=z; seta (x); setb (y); } void showc( ) { showa ( ); showb ( ); cout<<c<<end1; } }; int main ( ) { C c; c. setc(1,2,3); c.showc( ); return 0; } 程序执行后的输出结果是
A.1,2,3
B.1,1,1
C.2,2,2
D.3,3,3
正确答案:A
解析:本题考核派生类的应用。
本题中类A和类B都是基类。
而类C从类A公有派生,从类B处私有派生.所以类C中的函数成员可以访问类A和类B 中的公有成员。
在类C的函数成员setc中,调用基类A的函数成员seta对A的数据成员a赋值,还调用了基类B的函数成员setb对类B的数据成员b赋值,然后对类C自己的数据成员c赋值。
在类C的函数成员showc中,调用基类A 的函数成员showa显示数据成员a的值,还调用基类B的函数成员showb显示
数据成员b的值,然后输出类C自己的数据成员c的值.在主函数main中,先定义派生类的对象c,然后调用setc对c中的数据成员赋值,然后输出赋值结果。
所以程序最后输出应该为:1,2,3。
33.以下运算符中不能重载的运算符是
A.new
B.sizeof
C..*
D.++
正确答案:C
解析:本题考核运算符的重载。
C++不能重载的运算符包括:“.”、“.*”、“::”、“?:”。
34.执行语句序列ofstream outfite(“data.dat”);if(...)cout<<”ok”;else cout<<”fail”; 后,如果文件打开成功,显示“ok”,否则显示“fail”。
由此可知,上面if语句的“…”处的表达式是
A.outfile.fail( )或outfile
B.outfile.good( )或!outfile
C.outfile.good( )或outfile
D.outfile.fail( )或!outfile
正确答案:C
解析:本题考核C++的文件流。
文件流对象中的成员函数good( )用于判定刚进行的操作是否成功,成功时返回true,否则返回false。
成员函数fail( )用于判定刚进行的操作是否失败,失败时返回true,否则返回false。
35.有如下程序:#include <iostream>using namespace std; class sample { private: int x,y; public: sample(int i,int j) { x=i; y=j; } void disp ( ) {cout<<”disp1”<<end1; } void disp( ) const { cout<<”disp2”<<end1; };int main ( ) { const sample a(1,2); a.disp( ); return 0; } 该程序运行后的输出结果是
A.disp1
B.disp2
C.disp1 disp2
D.程序编译时出错
正确答案:B
解析:本题考核常对象、常数据和常函数。
C++中,在定义常对象时必须进行初始化,而且不能被更新。
如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数。
题中,对象a被定义成类sample的常对象,所以通过对象a只能调用其常成员函数disp( )。
所以程序最后输出disp2。
填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。
注意:以命令关键字填空的必须拼写完整。
36.某二叉树中度为2的结点有18个,则该二叉树中有______个叶子结点。
正确答案:19
解析:二叉树具有如下性质:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
根据题意,度为2的节点为18个,那么,叶子结点就应当是19个。
37.在面向对象方法中,类的实例称为______ 。
正确答案:对象
解析:类描述的是具有相似性质的一组对象。
例如,每本具体的书是一个对象,而这些具体的书都有共同的性质,它们都属于更一般的概念“书”这一类对众。
一个具体对象称为类的实例。
38.软件生命周期包括8个阶段。
为了使各时期的任务更明确,又可分为3个时期:软件定义期、软件开发期、软件维护期。
编码和测试属于______期。
正确答案:软件开发
解析:软件生命周期包括8个阶段:问题定义、可行性研究、需求分析、系统设计、详细设计、编码、测试、运行维护。
为了使各时期的任务更明确,又可以分为3个时期;软件定义期,包括问题定义、可行性研究和需求分析3个阶段;软件开发期,包括系统设计、详细设计、编码和测试4个阶段;软件维护期,即运行维护阶段。
可知,编码和测试属于软件开发阶段。
39.一棵二叉树第六层(根结点为第一层)的结点数最多为______个。
正确答案:32
解析:二叉树的一个性质是,在二叉树的第k层上,最多有2k-1(k>1)个结点。
由此,26-1等于32。
所以答案为32。
40.数据库系统中实现各种数据管理功能的核心软件称为______。
正确答案:数据库管理系统
解析:数据库系统中实现各种数据管理功能的核心软件称为数据库管理系统,它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行的。
41.下面程序的输出结果是______。
#include<iostream>using namespace std;int x;void funA(int&,int);void funB(int,int&);int。