二级C++笔试281.docx
《二级C++笔试281.docx》由会员分享,可在线阅读,更多相关《二级C++笔试281.docx(23页珍藏版)》请在冰点文库上搜索。
![二级C++笔试281.docx](https://file1.bingdoc.com/fileroot1/2023-7/6/307f7f69-814a-4020-923b-6756acbdcffb/307f7f69-814a-4020-923b-6756acbdcffb1.gif)
二级C++笔试281
二级C++笔试-281
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
70.00)
1.当使用fstram流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为
(分数:
2.00)
A.ios:
:
in
B.ios:
:
out
C.ios:
:
int|ios:
:
out
D.没有 √
解析:
[解析]C++中没在规定文件打开时的隐含打开方式,因此考生在写程序是必须指定打开方式,否则将出现错误。
2.设A为test类的对象且赋有初值,赋值符号已经重载,则语句testB=A;表示
(分数:
2.00)
A.语法错
B.为对象A定义一个别名
C.将对象A复制给对象B √
D.仅说明B和A属于同一个类
解析:
[解析]同上题。
3.假定a为一个整型数组名,则元素a[4]的字节地址为
(分数:
2.00)
A.a+4
B.a+8
C.a+16 √
D.a+32
解析:
[解析]注意:
VC编译器分配给整数的内存是4字节。
4.重载函数在调用时选择的依据中,错误的是
(分数:
2.00)
A.函数的参数名称 √
B.参数的类型
C.函数的名字
D.函数的类型
解析:
[解析]是否是重载函数,需要给编译器提供足够的信息判断。
其主要的依据是函数韵名字,参数的类型,函数的返回值类型。
5.以下程序运行后,输出结果是
#definePT5.5
#defineS(x)PT*x*x
main()
inta=1,b=2;
printf("%4.lf/n",S(a+b);
(分数:
2.00)
A.49.5
B.9.5 √
C.22.0
D.45.0
解析:
[解析]本题考察宏定义的使用,宏在使用是如同函数一样,但却是在编译时展开,而函数却是在运行时进行计算的。
6.关于const修饰符的说法中,错误的是
(分数:
2.00)
A.const既可以修饰成员函数,也可以修饰数据成员,还可以修饰对象
B.若const修饰了一个对象,则该对象中的所有数据成员都无法被更新
C.常对象无法调用一般成员函数
D.常成员函数只能被常对象调用,不能被一般对象调用 √
解析:
[解析]本题考察const修饰符的含义及其修饰不同对象的规则。
常对象既能被常对象调用,也能被一般对象调用,一旦const修饰了一个对象,则对象的所有数据成员都无法更新。
7.已知语句intm=10;则下列引用的表示中正确的是
(分数:
2.00)
A.int&x=m; √
B.int&y=10;
C.int&z;
D.float&t=&m;
解析:
[解析]本题考察引用的定义既使用。
引用是C++中新引入的概念,其使用方法同变量,而其本质同指针,具有指针的灵活性。
引用必须用变量进行赋值,不能用常量或常数。
8.设有以下类的定义:
classEx
intx;
public:
voidsetx(intt=0);
;
若在类外定义成员函数setx(),以下定义形式中正确的是
(分数:
2.00)
A.voidsetx(intt)...
B.voidEx:
:
setx(intt)... √
C.Ex:
:
voidsetx(intt)...
D.voidEx:
:
setx()...
解析:
[解析]选项A可以排除,原因是类的成员函数的定义必须用域作用符:
:
进行限定,选项C的限定位置不对,函数的类型应在最前面。
根据上下文可以指导,setx为单参成员函数,在定义时也必须指定参数,因此选项D也可以排除,正确答案为B。
9.已知类A有公用数据成员a,并重载了=运算符,且有Aobj2;constA*ptr=newA;则下列语句错误的是
(分数:
2.00)
A.ptr->a=100; √
B.ptr=&obj2;
C.ptr++;
D.obj2=*ptr;
解析:
[解析]本题考察const修饰符的作用。
注意;const位置不同,其修饰的部分也是不同的。
本题中const修饰的是ptr所指的对象本身,所以,ptr是可以重新指向新的对象,而ptr->a则无法被更新。
10.以下选项中与k=n++;完全等价的表达式是
(分数:
2.00)
A.k=n,n=n+1 √
B.n=n+1,k=n;
C.k=++n;
D.k+=n+1
解析:
[解析]本题考察混合表达式的展开。
11.以下有关类与结构体关系的叙述不正确的是
(分数:
2.00)
A.结构体中只包含数据;类中封装了数据和操作
B.结构体的成员对外界通常是开放的;类的成员可以被隐蔽
C.用struct不能声明一个类型名;而class可以声明一个类名 √
D.结构体成员默认为Public;类成员默认为private
解析:
[解析]可以说类来源于结构体,两者有相似之处。
但类的功能更强大一些,不仅增加了操作,还能够隐藏和包含其成员变量或成员函数。
12.程序设计方法要求在程序设计过程中
(分数:
2.00)
A.先编制出程序,经调试使程序运行结果正确后再画出程序的流程图
B.先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置处加注释
C.先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释
D.以上三种说法都不对 √
解析:
[解析]在程序设计过程中,一个很重要的环节是首先确定实现各种功能的算法,并且用某种工具将它精确地表达出来。
流程图是其中的工具之一。
因此,程序设计的过程应是先画出流程图,然后根据流程图编制出程序。
因此,选项A中的说法是错误的。
程序中的注释是为了提高程序的可读性,使程序易于理解、易于维护,注释必须在编制程序的同时加入。
因此,选项B和C中的说法也都是错误的。
13.语句cout<<(a=2)&&(b=-2);的输出结果是
(分数:
2.00)
A.无输出
B.结果不确定
C.-1
D.1 √
解析:
[解析]逻辑表达式的值输出结果是数字的形式。
C++规定,逻辑假用数字。
表示,而逻辑真则用非零表示。
注意:
在c++中,如果逻辑表达式的值是非零,则可以认为是真。
VC编译器在编译输出时将逻辑真输出为1。
14.以下的for循环
for(x=0,y=0,(y!
=123)&&(x<4);x++);
(分数:
2.00)
A.是无限循环
B.循环次数不定
C.最多执行4次 √
D.最多执行3次
解析:
[解析]本题考察for循环的三个表达式的用法及其执行顺序,本题中for循环的第三个表达式完成变量自增,以控制for循环的执行次数。
15.在多继承中,公用派生和私有派生对于基类成员在派生类中的可访问性与单继承规则
(分数:
2.00)
A.完全相同 √
B.完全不同
C.部分相同,部分不同
D.以上都不对
解析:
[解析]C++语言中为了简化继承关系,规定多重继承中可访问性规则同单继承规则。
16.对于常数据成员,下面描述正确的是
(分数:
2.00)
A.常数据成员可以不初始化,并且不能更新
B.常数据成员必须被初始化,并且不能更新 √
C.常数据成员可以不初始化,并且可以被更新
D.常数据成员必须被初始化,并且可以被更新
解析:
[解析]常数据成员不能背更新,因此可以排除选项C和D。
常数据成员所包含的值不能被更新,所以必须被初始化,如果初始化则常数据成员里的随机值是没有实际意义的.
17.在结构化分析方法中,数据字典的作用是
(分数:
2.00)
A.存放所有需要处理的原始数据
B.存放所有处理的结果
C.存放所有的程序文件
D.描述系统中所用到的全部数据和文件的有关信息 √
解析:
[解析]在结构化分析方法中,数据字典的作用是描述系统中所用到的全部数据和文件的有关信息。
18.如果一个类含有一个以上的纯虚函数,则称该类为
(分数:
2.00)
A.虚基类
B.抽象类 √
C.派生类
D.以上都不对
解析:
[解析]纯虚函数一般提供派生类进行继承的参考,是多态性的重要保证,一个具有纯虚函数的类称为抽象类,抽象类可以具有其他类的特点,但不能实例化,其主要目的是作为派生类的基类存在,处于类层次的高层。
19.已知inta,b;用语句scanf("%d%d",&a,&b);输入a,b的值时,不能作为输入数据分隔符的是
(分数:
2.00)
A., √
B..空格
C.回车
D.Tab键
解析:
[解析]C++语言规定在使用scanf输入时可以用作数据分隔符的有空格,回车和Tab键。
用户如果要从键盘输入空格字符,则需要使用其他的输入方式。
20.以下不能作为输出流对象的是
(分数:
2.00)
A.文件
B.内存
C.键盘 √
D.显示器
解析:
[解析]输出流对象包括基本的输出设备,如显示器,内存和文件,而输入流对象则包括键盘,文件以及其他输入设备。
21.以下不属于构造函数特征的是。
(分数:
2.00)
A.构造函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定函数类型 √
解析:
[解析]构造函数和析构函数一样,是类的特殊的成员函数。
其特殊之处在于,构造函数可以有多个版本以实现不同的初始化方式,不能指定形参和函数类型,这些都是系统默认完成。
22.下列能对对象进行初始化的是
(分数:
2.00)
A.构造函数 √
B.析构函数
C.友元函数
D.静态成员函数
解析:
[解析]类的构造函数的作用就是在类实例化对象时,即对象还没有生成时完成一些初始化的工作。
此时,析构函数和静态成员函数都还没有建立,而友元函数是类外部的函数.根本无法完成类的实例化工作。
23.对下列二叉树进行后序遍历的结果是
(分数:
2.00)
A.ZBTYCPXA √
B.ATBZXCYP
C.ZBTACYXP
D.ATBZXCPY
解析:
[解析]按照二叉树后序遍历的方法:
在访问根结点;遍历左子树与遍历右于树这三者中,首先遍历左子树,然后遍历右于树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点.对本题中的二叉树进行后序遍历的结果应是ZBTYCPXA。
24.设有如下关系表:
则下列操作中正确的是
(分数:
2.00)
A.T=R∩S
B.T=R∪S √
C.T=R×S
D.T=R/S
解析:
[解析]显然,关系表T是关系表R与S的并,即T=R∪S。
25.下列叙述中正确的是
(分数:
2.00)
A.算法的空间复杂度是指算法程序的长度
B.算法的效率只与所处理数据的规模有关,而与数据的存储结构无关
C.数据的逻辑结构与存储结构是一一对应的
D.上述三种说法都不对 √
解析:
[解析]算法的空间复杂度;一般是指执行这个算法所需要的内存空间,它包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。
因此,选项A中的说法是错误的。
虽然算法的计算工作量(即时间复杂度)是问题规模的函数,但它是与数据的存储结构有密切的关系.因此,选项B中的说法也是错误的。
一个数据结构中的各数据元素在计算机存储空间中的位置关系与逻辑关系有可能是不同的。
因此,选项C中的说法也是错误的,D则是正确的。
26.以下叙述正确的是
(分数:
2.00)
A.派生类中不可以定义与基类中同名的成员变量
B.派生类中不可以重载成员函数
C.派生类中不能调用基类中的同名函数
D.以上三项均不正确 √
解析:
[解析]派生类和基类之间的关系比较重要,派生类不仅可以定义同名的成员变量,还可以调用或重载基类的同名函数,这是类的多态性的基础。
27.在下列数据管理的各阶段中,数据独立性最高的阶段是
(分数:
2.00)
A.手工管理
B.文件系统
C.数据项管理
D.数据库系统 √
解析:
[解析]显然,在数据库系统阶段,数据独立性最高。
28.下列数据结构中具有记忆作用的是
(分数:
2.00)
A.栈 √
B.队列
C.有序表
D.二又树
解析:
[解析]栈是按照“先进后出”(FILO-FirstInLastOut)或“后进先出”(LIFO-LastInFirstOut)的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。
因此,栈具有记忆作用。
29.设有定义charstr[80];以下不能将输入数据first/nsecond/n<CR>读取到数组str中的语句是
(分数:
2.00)
A.cin.get(str,strlen(str));
B.cin.getline(str,strlen(str));
C.cin>>str;
D.cin.read(str,strlen(str)); √
解析:
[解析]本题考察cin流对象的几种成员函数get,getline,read及流提取符>>的使用规则。
30.下列关于关系运算的叙述中正确的是
(分数:
2.00)
A.投影、选择、连接是从二维表的行的方向来进行运算
B.并、交、差是从二维表的列的方向来进行运算
C.投影、选择、连接是从二维表的列的方向来进行运算 √
D.以上三种说法都不对
解析:
[解析]在关系模型的数据语言中,一般除了运用常规的集合运算(并、交、差、笛卡尔积等)外,还定义了一些专门的关系运算,如投影、选择、连接等运算。
前者是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的,后者主要是从二维表的列的方向来进行运算。
因此,选项A与B中的说法都是错误的,而选项C中的说法是正确的。
31.在长度为n的有序线性表中进行二分查找,需要的比较次数为
(分数:
2.00)
A.log2n √
B.nlog2n
C.n/2
D.(n+1)/2
解析:
[解析]在长度为n的有序线性表中进行二分查找,需要的比较次数为log2n。
32.下列叙述中正确的是
(分数:
2.00)
A.软件交付使用后还需要进行维护 √
B.软件一旦交付使用就不需要再进行维护
C.软件交付使用后其生命周期就结束
D.软件维护是指修复程序中被破坏的指令
解析:
[解析]维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段。
软件工程学的目的就在于提高软件的可维护性,同时也要设法降低维护的代价。
软件维护通常有以下四类;
①为纠正使用中出现的错误而进行的改正性维护;
②为适应环境变化而进行的适应性维护;
③为改进原有软件而进行的完善性维护;
④为将来的可维护和可靠而进行的预防性维护。
软件维护不仅包括程序代码的维护,还包括文档的维护。
文档可以分为用户文档和系统文档两类。
但无论是哪类文档,都必须与程序代码同时维护。
只有与程序代码完全一致的文档才有意义和价值。
由此可知,本题中选项B、C、D中的说法都是错误的。
33.下述说法错误的是
(分数:
2.00)
A.对象之间不可以相互赋值 √
B.对象可以用作函数参数
C.对象可以用作数组的元素
D.对象可以用作另一对象的成员
解析:
[解析]如果重载了赋值运算符后,对象之间是可以赋值的,对象如C++中其他内置的数据类型一样,可以作为函数参数、数组元素,其他对象的成员存在。
34.下列各类函数中,不是类的成员函数的是
(分数:
2.00)
A.构造函数
B.析构函数
C.友元函数 √
D.拷贝构造函数
解析:
[解析]构造函数包括默认构造函数和拷贝构造函数等,析构函数和构造函数一样属于类的特殊的成员函数.而友元函数则是为了增加类的访问灵活行而允许其他类的成员函数或全局函数访问类的内部变量或成员函数的一种机制,其缺点是破坏了类的封装性。
35.以下不能够读入空格字符的语句是
(分数:
2.00)
A.charline;line=cin.get()
B.charline;cin.get(line);
C.charline;cin>>line; √
D.charline[2];cin.getline(line,2);
解析:
[解析]本题考察cin流对象的几种成员函数get,getline的使用规则。
流提取符>>在提取字符时,遇到C++规定的分隔符如空格,回车和Tab键时自动分割,故本题正确答案为C。
二、填空题(总题数:
15,分数:
30.00)
36.数据结构分为逻辑结构与存储结构,循环队列属于【1】。
(分数:
2.00)
填空项1:
__________________ (正确答案:
存储结构)
解析:
[解析]数据结构分为逻辑结构与存储结构,循环队列属于存储结构.因此,本题的正确答案为存储结构。
37.在最坏情况下,冒泡排序所需要的比较次数为【2】。
(分数:
2.00)
填空项1:
__________________ (正确答案:
n(n-1)/2)
解析:
[解析]在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2。
38.设一棵完全二叉树共有839个结点,则在该二叉树中有【3】个叶子结点。
(分数:
2.00)
填空项1:
__________________ (正确答案:
420)
解析:
[解析]一般二又树有一个性质:
在任意一棵二叉树中,度为。
的结点(即叶子结点)总是比度为2的结点多一个。
在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。
综合以上两点可以得到如下结论;
设一棵完全二叉树具有n个结点。
如果n为偶数.则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点;如果n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。
在本题中,完全二叉树共有839个结点,839是奇数,因此,在该二叉树中有420个叶子结点以及419个度为2的结点,没有度为1的结点。
39.数据模型分为格式化模型与非格式化模型,层次模型与网状模型属于【4】。
(分数:
2.00)
填空项1:
__________________ (正确答案:
格式化模型)
解析:
[解析]数据模型分为格式化模型与非格式化模型,层次模型与网状模型属于格式化模型。
40.在关系模型中,把数据看成一个二维表,每一个二维表称为一个【5】。
(分数:
2.00)
填空项1:
__________________ (正确答案:
关系)
解析:
[解析]在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系.
41.执行"cout<<char('A'+2)<<end1;"语句后得到的输出结果为【6】。
(分数:
2.00)
填空项1:
__________________ (正确答案:
C)
解析:
[解析]本题考察强制类型转化,char()在这里作为一个强制类型转化函数存在,将整数转化为字符。
42.下列函数的功能是【7】。
#include<iostream.h>
intFunc(inta,intb)
if(a>b)return1;
elseif(a==b)return0;
elsereturn-1;
(分数:
2.00)
填空项1:
__________________ (正确答案:
比较两个整数a和b的大小,若a>b则返回1,若a等于b,则返回0,否则返回-1。
)
解析:
43.根据三角形的基本定理完成填空,则表达式为【8】。
#include<iostream.h>
#include<math.h>
voidmain()
doublea,b,c,s,area;
cout<<"请输入三角形三边a,b,c:
"<<end1;
cin>>a>b>>c;
if(______)
s=(a+b+c)/2;
area=sqrt(s*(s-
∙a)*(s-
∙b)*(s-
∙c)),
cout<<"三角形的面积为:
"<<area;
else
cout<<"不能构成三角形!
"<<end1;
(分数:
2.00)
填空项1:
__________________ (正确答案:
a>0&&b>0&&c>0&&a+b>c&&b+c>a&&c+a>b)
解析:
[解析]本题考察考生将实际问题转换为逻辑表达式的能力。
根据三角形的基本定理“两边和大于第三边”可穷举出其表达式。
44.下列程序的运行结果为【9】。
#include<iostream,h>
voidmain()
inti;
for(i=1;i<6;i++)if(i==3)break:
com<<"i="<<i<<end1;
(分数:
2.00)
填空项1:
__________________ (正确答案:
i=3)
解析:
[解析]本题考察考生的for语句和if语句综合使用能力。
本题的情况适用于希望在满足指定值时停止循环的情况。
45.下列程序编译错误,因为add函数返回值是一个引用,故对return后返回值的要求是【10】。
#include<iostream.h>
int&add(intx,inty)
returnx+y;
voidmain()
inti=3,j=19;
cout<<(add(i,j)+=20)<<end1;
(分数:
2.00)
填空项1:
__________________ (正确答案:
不能是表达式)
解析:
[解析]引用是变量的别名,其实质是变量的地址。
return在返回值时,如果其后为表达式,则系统为该表达式生成一个临时变量用于存放该表达式的结果,函数执行完毕之后该变量被系统回收,因此,返回的该变量的地址对调用函数来说已经没有意义了。
46.在下面的类定义中,this指针的用途是【11】。
#include<iostream.h>
classSample
intx,y;
public:
Sample(inti,intj)x=i;y=j;
voidasstgn(Samplesa):
;
voidSample:
:
assign(Samplep)
if(this!
=&p)
x=p.x;
y=p.y;
(分数:
2.00)
填空项1:
__________________ (正确答案:
防止对类对象自己给自己赋值)
解析:
[解析]防止对象给自己赋值,这是一种自毁行为,这种行为如果不加以判断,可能造成无意识的破坏。
47.参照函数模板的写法,完成非模板函数的定义,语句为【12】。
#include<iostream,h>
#include<string.h>
template<classT>
Tmin(Ta,T