国家二级(C++)笔试模拟试卷87(题后含答案及解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国家二级(C++)笔试模拟试卷87(题后含答案及解析) 题型有:1. 选择题 2. 填空题
选择题(每小题2分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。
1.C++源晚间中包含的输入/输出头文件为( )。
A.stdio.h
B.stdafx.h
C.iostream.h
D.stream.h
正确答案:C
2.下列关于C++函数的描述中正确的是( )。
A.主函数是程序的入口,它由用户定义的函数调用
B.函数在调用之前必须先被声明
C.每个用户定义的函数只能被其他函数调用一次
D.函数是C++中面向对象程序设计框架的基本组成单元
正确答案:B
3.已知int a,*pa=&a;输出指针pa十进制的地址值的方法是( )。
A.cout<<pa;
B.cout<<*p;
C.cout<<&pa;
D.cout<<long(pa);
正确答案:D
4.包容类Contain和内嵌类Embed定义如下:#include<iostream.h >class Contain { private:int X;protected:int z;public:class Embed { private:int y;public:Embed( ){y=100;} int Embed_Fun( );}MyEmbed;int Contain_Fun( );};对上面的定义,正确的描述是( )。
A.定义类Embed对象的语句是:Contain?Embed embed;
B.类Contain的成员函数Contain_Fun( )中可以用MyEmbeD.y的方式访问类Embed的私有成员y
C.类Embed的成员函数Embed_Fun( )中可以直接访问Contain的私有成员x
D.类Embed的成员函数Embed_Fun( )中可以直接访问Contain的保护成员Z
正确答案:A
5.若要把函数void f( )定义为aClass的友元函数,则应该类aClass的定义中加入的语句是( )。
A.void f( );
B.static void f( );
C.friend f( );
D.friend void f( );
正确答案:D
6.如果表达式++x/y中,++是作为友元函数重载的,/是作为成员函数重载的,则该表达式还可为( )。
A.(operator++(x)).operator/(y)
B.(operator++(0)).operatr/(y)
C.operator/((operator++(x,0)),y)
D.operator/((operator++(0)),y)
正确答案:A
7.下述静态数据成员的特性中,( )是错误的。
A.说明静态数据成员时前边要加修饰符static
B.静态数据成员要在类体外进行初始化
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符
D.静态数据成员不是所有对象所共用的
正确答案:B
8.下列对基类和派生类关系的描述中,错误的是( )。
A.派生类是基类的具体化
B.派生类是基类的子集
C.派生类是基类定义的延续
D.派生类是基类的组合
正确答案:B
9.已知枚举类型定义语句为:enum Token{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};则下列说中错误的是( )。
A.枚举常量NAME的值为1
B.枚举常量NUMBER的值为1
C.枚举常量MINUS的值为6
D.枚举常量PRINT的值为10
正确答案:A
10.有以下程序#include<iostream.h>void main( ) {int a=5,b=0,c=0; if(a=b+c)cout<<”***”<<endl:else cout <<”$$$”<<<endl;} 下列选项叙述正确的是( )。
A.有语法错不能通过编译
B.可以通过编译但不能通过连接
C.输出***
D.输出$$$
正确答案:D
11.有如下程序:#include<iostream>using namespace std;class XX{ protected;int k;public:XX(int n=5):k(n){} ~XX( ){cout<<”XX”;} virtual void f( )const=0;};inline void XX::f( )const{cout<<k+3;} class YY:public XX{ public:~YY( ){cout<<”YY”;} void f( )const{out<<k-3;XX:f( );} };int main( ){ XX &p=*new YY; p.f( );delete &p;return 0;};执行上面的程序将输出( )。
A.28XX
B.28YYXX
C.-33XX
D.-33XXYY
正确答案:A
12.类模板的模板参数( )。
A.只可作为数据成员的类型
B.只可作为成员函数的返回类型
C.只可作为成员函数的参数类型
D.以上三者皆可
正确答案:D
13.在下面四个选项中,( )是用来声明虚函数的。
A.virtual
B.public
C.using
D.假
正确答案:A
14.C++中运算符优先级由高到低排列正确的是( )。
A.::+++//
B.<*//,
C.sizeof %+::
D.,&& new sizeof
正确答案:A
15.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( )。
A.AB operator+(AB &a,AB &B)
B.AB perator+(AB&)
C.opetator+(AB a)
D.AB & operator+( )
正确答案:B
16.定义如下变量:char one_char,则语句cin>>one_char等价于C语言中的( )语句。
A.printf(one_char);
B.prinft(“%c”,one_char);
C.scanf(one_char);
D.scanf(“%c”,&one_char);
正确答案:D
17.下列关于C++函数的描述中正确的是( )。
A.主函数是程序的入口,它由用户定义的函数调用
B.函数在调用之前必须先被声明
C.每个用户定义函数只能被其他函数调用一次
D.函数是C++中面向对象程序设计框架的基本组成单元
正确答案:B
18.下面关于C++语言变量的叙述错误的是( )。
A.C++语言中变量分为auto,static,extern和register四种存储类型
B.自动变量和外部变量的作用域为整个程序
C.内部静态变量的作用域是定义它的函数
D.外部静态变量的作用域是定义它的文件
19.如果x=0,那么while(true)中的true与下面的条件( )等价。
A.X=1
B.X==1
C.X>1
D.X<1
正确答案:A
20.以下只有在使用时才为该类型变量分配存储单元的存储类型说明是( )。
A.auto和static
B.auto和register
C.register和static
D.extern和register
正确答案:B
21.在计算机中,算法是指( )。
A.加工方法
B.解题方案的准确而完整的描述
C.排序方法
D.查询方法
正确答案:B
22.一个( )允许用户为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数和返回值能取任意数据类型。
A.函数模板
B.模板函数
C.类模板
D.模板类
正确答案:C
23.对于拷贝初始化构造函数,正确的描述是( )。
A.在C++语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数
B.必须为每个类定义拷贝初始化构造函数
C.如果要使用拷贝初始化构造函数,则必须在类中先定义
D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数
24.下面关于构造函数和析构函数的描述中,错误的是( )。
A.析构函数可以声明为虚函数
B.对虚析构函数的调用可以采用动联编
C.一个类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响
D.构造函数可以声明为虚函数
正确答案:D
25.关于友元的概念错误的是( )。
A.友元函数没有this指针
B.调用友元函数时必须在它的实参中给出要访问的对象
C.一个类的成员函数也可以作为另一个类的友元函数
D.只能在类的公有段声明友元
正确答案:D
26.已知:int a,b;下列switch语句中,( )是正确的。
A.switdh(a) { case a:a++;break;case b:b++:break:}
B.switch(a+b) { case 1:a+b; break;case 1:a-b }
C.switch(a*a) { case1,2:++a;case3,4:++b;} D.swish(a/l0+b) { cases 5:a/5;break;default:a+b:}
正确答案:D
27.带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化( )。
A.与虚基类下面的派生类个数有关
B.多次
C.两次
D.一次
正确答案:D
28.己知类X成功地重载了--、=、+、和[]这几个运算符,则其中肯定属于成员函数的运算符是( )。
A.+和=
B.[]和后置--
C.=和[]
D.前置--和[]
正确答案:C
29.下面程序的结果为( )。
#include”iostream.h”void change(int a,int b) { int temp;temp=a;a=b b=temp;} void main( ) { int m,n;m=8;n=9;change(m,n);cout<<m<<”“<<n<<endl;}
A.89
B.98
C.程序有错误
D.99
正确答案:A
30.关于成员函数特征的下述描述中,( )是错误的。
A.成员函数一定是内联函数
B.成员函数可以重载
C.成员函数可以设置参数的默认值
D.成员函数可以是静态的
正确答案:A
31.如果一个类至少有一个纯虚函数,那么就称该类为( )。
A.抽象类
B.虚基类
C.派生类
D.以上都不对
正确答案:A
32.在C++中,打开一个文件,就是将这个文件与一个( )建立关联,关闭一个文件,就是取消这种关联。
A.类
B.流
C.对象
D.结构
正确答案:B
33.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
A.函数调用可以作为独立的语句存在
B.函数调用可以无返回值
C.函数调用町以出现在表达式中
D.函数调用可以作为一个函数的形参
正确答案:D
34.下列函数中,( )是对文件进行写操作的。
A.get( )
B.read( )
C.seekg( )
D.put( )
正确答案:D
35.关于read( )函数的下列描述中,正确的是( )。
A.该函数只和来从键盘输入中获取字符串
B.该函数所获取的字符多少是不受限制的
C.该函数只能用于文本文件的操作中
D.该函数只能按规定读取所指定的字符数
正确答案:D
填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。
注意:以命令关键字填空的必须拼写完整。
36.冒泡排序算法在最好的情况下的元素交换次数为【】。
正确答案:0
解析:根据冒泡排序算法思想可知,若待排序的初始序列为“正序”序列,则只需进行一趟排序,在排序过程中进行n-1次关键字间的比较,且不移动和交换记录,这种情况是冒泡排序的最好情况,故冒泡排序算法在最好的情况下的元素交换次数为0。
37.在最坏情况下,堆排序需要比较的次数为【】。
正确答案:O(nlog2n)
解析:在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2;简单插入排序所需要的比较次数为n(n -1)/2;希尔排序所需要的比较次数为O(nl.5);堆排序所需要的比较次数为O(nlog2n)。
38.若串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。
39.软件开发环境是全面支持软件开发全过程的【】集合。
正确答案:软件工具
40.关系数据库的关系演算语言是以【】为基础的DML语言。
正确答案:谓词演算
解析:关系数据库中的关系演算包括元组关系演算和域关系演算。
二者都是由原子公式组成的公式。
而这些关系演算都是以数理逻辑中的谓词演算为基础的。
41.一个C++语言程序的开发步骤通常包括编辑、【】、链接、运行和调试。
正确答案:编译
解析:C++语言程序开发的基本步骤是编辑、编译、链接、运行和调试。
42.若已知a=10,b=20,则表达式!a<b的值为【】。
正确答案:1
解析:计算表达式!a<b,先计算!a,因a的值为10,!a的值为0。
关系表达式0<20为真,所以表达式!a<b的值为1。
43.友元类的所有成员函数都是另一个类的【】。
正确答案:友元函数
解析:C++语言中友元类中的函数都是另一个类的友元函数。
44.表达式x.operator++( )还可写成【】。
正确答案:++x
解析:C++语言中用成员函数重载++x为x.operator++( )用友元函数重载++x为:operator++(x)
45.以下程序的输出结果是【】。
#include<iostream.h>void main( ) {int a=0;a+= ( a=8 );cout <<a;}
正确答案:16
解析:解答本题的关键是要分析清楚表达式a+= (a=8)中,a的值已经被赋为8,而不是0。
46.若要在C盘根目录下作为二进制文件打开文件test.dat ,则应该用的语句是【】。
正确答案:ifstream fin(“C:\test.dat”,ios_binary);或ifstream fin;fin.open(c:\test.dat”,ios_binary);
解析:C++中打开文件有两种方式①ifstream fin (“test.dat”);②ifstream fin;fin.open(“test.dat”);,ios_binary的意义是以二进制文件打开。
fin.open(“test.dat”);,ios_binary的意义是以二进制文件打开。