1、全国计算机等级考试二级C+真题二及详解2016年3月全国计算机等级考试二级C+真题二(总分100, 考试时间120分钟)一、选择题(每小题1分,共40分)1. 假定int类型变量占用两个字节,其有定义int x10=0,2,4;,则数组x在内存中所占字节数是( )。A 3B 6C 10D 20该问题分值: 1答案:Dx数组共有10个元素,在花括号内只提供3个初值,这表示只给前面的3个成员赋值,后7个元素的值为0,所以,一共有20个字节。2. 有两个关系R,S如下:由关系R通过运算得到关系s,则所使用的运算为( )。A 选择B 投影C 插入D 连接该问题分值: 1答案:B投影运算是指对于关系内的
2、域指定可引入新的运算。本题中s是在原有关系R的内部进行的,是由R中原有的那些域的列所组成的关系。所以选择B。3. 对于循环队列,下列叙述中正确的是( )。A 队头指针是固定不变的B 队头指针一定大于队尾指针C 队头指针一定小于队尾指针D 队头指针可以大于队尾指针,也可以小于队尾指针该问题分值: 1答案:D循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以队头指针有时可能大于队尾指针有时也可能小于队尾指针。4. 下列有关函数重载的叙述中,错误的是( )。A 函数重载就是用相同的函数名定义多个函数B 重载函数的参数列表必须不同C 重载函数的返回值类
3、型必须不同D 重载函数的参数可以带有默认值该问题分值: 1答案:C所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不 同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。所以本题答案为C。5. 有三个关系R S和T如下则由关系R和S得到关系T的操作是( )。A 自然连接B 并C 交D 差该问题分值: 1答案:D关系T中的元组是关系R中有而关系s中没有的元组的集合,即从关系R中除去与关系s中相同元组后得到的关系T。所以做的是差的运算。6. 下面关于类和对象的描述中,错误的是( )。A 类就是C
4、语言中的结构体类型,对象就是C语言中的结构体变量B 类和对象之间的关系是抽象和具体的关系C 对象是类的实例,一个对象必须属于一个已知的类D 类是具有共同行为的若干对象的统一描述体该问题分值: 1答案:A在c+语言中,类和结构体有本质区别,类中包含数据及操作函数,而结构体只包含有数据。7. 有如下程序:#inCludeusing namespaCe std;Class testprivate:int a;publiC:test()Cout”ConstruCtor”endl;test(int ACoutaendl;test(Const test&_test) a=testa:Cout”Copy C
5、onstruCtor”endl: test()Cout”destruCtor”endl;int main() test A(3); return 0;执行这个程序的输出结果是( )。A 3B ConstruCtordestruCtorC Copy ConstruCtordestruCtorD 3destruCtor该问题分值: 1答案:D本题考查默认构造函数和带参数的构造函数以及析构函数,本题中定义了一个对象A(3),对象带着参数,所以执行带参数的构造函数输出3,然后执行析构溺数,输出destructor。所以本题答案为D。8. 有如下函数模板:templateT east(U u)i ret
6、urn u;其功能是将U类型数据转换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是( )。A cast(i);B cast(i);C east(i);D east(i);该问题分值: 1答案:D本题考查函数模板的基本运用,属于基础知识。函数模板实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型代表,这个通用函数就是函数模板。函数模板可以设定默认参数,这样在调用模板函数时就可以省实参,函数模板的实例就是一个函数的定义。所以本题答案为D。9. 下面程序的运行结果是( )。#includevoid fun(int *a,int *B int x=*
7、a:*a=*b;*b=X;cout*a*b”:void main() int X=1,Y=2; fun(&x,&y);coutxYendl;A 12 12B 12 21C 21 12D 21 21该问题分值: 1答案:D本题考查的是指针和引用,函数fun完成把x和Y互换的操作。10. 在C+语言中,打开一个文件就是将这个文件与一个( )建立关联。A 流B 类C 结构D 对象该问题分值: 1答案:Ac+的V0系统是通过一一种称为流的机制来实现文件和控制台的I0操作的。简单地说,在C+中,输入输出操作是通过流来完成的。而文件流以磁盘文件及其他可按文件方式进行管理的外部设备为输入输出对象。每个文件流
8、都应当与一个打开的文件相联系;关闭卟文件就是取消这种联系。11. 下列语句中,错误的是( )。A const int buffer:256;B const int temp;C const double*point;D const double*rt=new double(55);该问题分值: 1答案:Beonst是一个C+语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量只能被读,必须初始化:,B选项中没有初始化,C选项为指向常量的指针,定义时初始化与否均可,如果是const*double point形式,则为常指针,必须在定义时
9、进行初始化,A、c、D都正确。12. 下列程序的输出结果为( )。#includevoid main()char*a=”hell0”,”the”,”world”;char* pa = a:pa+;cout*paendl:A helloB theC worldD hellotheworld该问题分值: 1答案:B本题主要考查的是指针数组和指向指针的指针之间的关系,其中a是指针数组,pa是指向指针数组行的指针,所以pa自加l相当于指向下一行。13. 关于运算符重载,下列表述中正确的是( )。A C+已有的任何运算符都可以重载B 运算符函数的返回类型不能声明为基本数据类型C 在类型转换符函数的定义中
10、不需要声明返回类型D 可以通过运算符重载来创建C+中原来没有的运算符该问题分值: 1答案:C重载运算符的规则如下:c+不允许用户自已定义新的运算符,只能对已有的c+运算符进行重载;c+不能重载的运算符只有5个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用至少应有一个是类对象,即不允许参数全部是c+的标准类型。故本题答案为C。14. 可以用Pa的形式访问派生类对象P的基类成员a,其中a是( )。A 私有继承的公有成员B 公有继承的私有成员C 公有继承的保护成员D 公有继承的公有成员该问
11、题分值: 1答案:D只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。15. 在下列原型所示的C+函数中,按“传值”方式传递参数的是( )。A void fl(int X);B void t2(int*X);C void f3(Const int*X);D void f4(int&x);该问题分值: 1答案:A函数参数的3种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。其中B、C选项都是传递变量指针,D选项为引用形参,所以本题答案为A。16. 以下关键字不能用来声明类的访问权限的是( )。A publicB staticC pro
12、tectedD private该问题分值: 1答案:B类的成员访问权限有3种:public(公用)、protected(保护)、private(私有)。17. 下面程序的运行结果为( )。#include class Aint hum;public:A(int i)nuln=i;A(A&Anum=anum十+; void print()eout(hum; ;void main()A a(1),b(A; aprint();A print();A 11B 12C 21D 22该问题分值: 1答案:C本题考查考生对拷贝构造函数的掌握。因为+运算是右结合的,所以在使用a对b赋值时,b的nnm变为1,而
13、a的nnm变为2(先赋值再自加)。18. 下面是重载为非成员函数的运算符的函数原型,其中错误的是( )。A Fraction operator+(Fraction,Fraction);B Fraction operator一(Fraction);C Fraction&operator=(Fraction&,Fraction);D Fraction&operator+=(Fraction&,Fraction);该问题分值: 1答案:C本题考查四种运算符作为非成员函数的重载的使用方法,根据重载规则,本题答案为c,c项正确原型为:Fraction operator=(Fraction)。19. 下列
14、语句中错误的是( )。A Const int a;B Const int a=10;C Const int * point=0;D Const int * point=new int(10);该问题分值: 1答案:Aconst是一个c+语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量照能被读,必须初始化。A选项没有初始化,B、C、D选项都正确。20. 下列关于函数的描述中,错误的是( )。A 函数可以没有返回值B 函数可以没有参数C 函数可以是一个类的成员D 函数不能被定义为模板该问题分值: 1答案:D本题考查函数的基础知识,函数
15、可以没有返回值,没有参数,也可以是一个类的成员,函数可以定义为模板,即模板函数。21. 下列语句都是程序运行时的第1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是( )。A coutinternal12345;B eoutleft12345;C coutright12345;D coutsetw(6)12345;该问题分值: 1答案:D本题考查控制输出格式,A、B、c选项都会输出“12345”,只有D选项输出“12345”,所以本题答案为D。22. 有三个关系R、S和T如下:则由关系R和S得到关系T的操作是( )。A 自然连接B 差C 交D 并该问题分值: 1答案:B关系T中的
16、元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。23. 有如下程序:#includeusing namespace std;class VACpublic:intf()constreturn 3;int f()retum 5;int main()VAC vl;const VAC v2;coutvlf()v2f();return 0;执行这个程序的输出结果是( )。A 53B 35C 55D 33该问题分值: 1答案:A本题考查常对象及常成员函数及构造函数,常埘象只能凋用常成员函数,所以本题中,对象v1为普通对象,执行v1f()后,会执行默认构造函数,输出5,对象v2为常列象,
17、执行v2f()后,会执行常构造函数,输出3。24. 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是( )。A 一对一B 一对多C 多对一D 多对多该问题分值: 1答案:B因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。25. 下列关于二叉树的叙述中,正确的是( )。A 叶子结点总是比度为2的结点少一个B 叶子结点总是比度为2的结点多一个C 叶子结点数是度为2的结点数的两倍D 度为2的结点数是度为1的结点数的两倍该问题分值: 1答案:B根据二叉树的基本性质3:在任意一棵:二叉树中,度为0的叶子结点总是比度为2的结点多一个。所
18、以选择B。26. 有以下语句,则对a数组元素的引用不正确的是(0i9)( )。int a10=0,1,2,3,4,5,6,7,8,9,*P=a;A aP-aB *(&ai)C PiD *(*(a+i)该问题分值: 1答案:D选项D第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。27. 下列程序的运行结果为( )。#includevoid print(double Acout+a:void print(int atint Bcoutba:void main()print(12);eout”:print(3,4);A 12 34B 22 34C 12 43D 22 43该问题分值
19、: 1答案:D本题考查的是对重载函数的掌握,因为+a是右结合的,所以a先自加1再输出,即为22,之后调用函数print(int a,int b)输出h和a,即43。28. 存在定义int a10,x,* pa;,若pa=&a0,下列的( )选项和其他3个选项不是等价的。A x=*pa;B x=*(a+1);C x=*(pa+1)D x=a1;该问题分值: 1答案:A本题考查的是数组和指向数组的指针之问的关系,选项A中x是被数组a的第一个元素赋值,其余的都是被数组a的第二个元素赋值。29. 下列叙述中正确的是( )。A 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B 在循环队列中,只
20、需要队头指针就能反映队列中元素的动态变化情况C 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D 循环队列中元素的个数是由队头指针和队尾指针共同决定该问题分值: 1答案:D循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A错误;在循环队列中需要队头指针与队尾指针来共同反映队列中元素的动态变化情况,所以B与C错误。30. 通常拷贝构造函数的参数是( )。A 某个对象名B 某个对象的成员名C 某个对象的引用名D 某个对象的指针名该问题分值: 1答案:C复制初始化构造函数的作用是用一个已知的对象来初始化一个被创建的同类的对象,该函数只有一个参数,并且是对同类的某个对象的引
21、用。31. 如果在表达式+x/y中,“+”是作为友元函数重载的,“/”是作为成员函数重载的,则该表达式还可为( )。A (operator+(x)operator/(Y)B (operator+(0)operator/(Y)C operator/(operator+(x,0),Y)D operator/(operator+(0),Y)该问题分值: 1答案:Ac+中用成员函数重载+X为:xoper-ator+(),用友元函数重载+x为:0perator+(x),用成员函数重载xy为:xoperator(Y),用友元函数重载xy为:operator(X,Y)。32. 一个函数功能不太复杂但要求被频
22、繁调用,应选用( )。A 内联函数B 重载函数C 递归函数D 嵌套函数该问题分值: 1答案:A本题考查的是内联函数的使用,它的引入是为了,解决程序中函数调用的效率问题,在编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来替换。33. 数据库应用系统中的核心问题是( )。A 数据库设计B 数据库系统设计C 数据库维护D 数据库管理员培训该问题分值: 1答案:A数据库应用系统中的核心问题是数据库的设计。34. 有如下程序: Class Base publiC:int data; ;Class Derivedl:publiC Base;Class Derived2:proteCte
23、d Base;int main() Derivedl dl; Derived2 d2; dldata=0;/d2data=0;/ retum 0;下列关于程序编译结果的描述中,正确的是( )。A 皆无编译错误B 有编译错误,无编译错误C 无编译错误,有编译错误D 皆有编译错误该问题分值: 1答案:C本题考查公用继承和保护继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在 派生类中保持原有访问属性,其私有成员仍为基类私有、稿受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。本题中Derived1公用继承Base所以编译正确,Derived2保护
24、继承Base,所以编译不正确。35. 下列关于基类和派生类关系的叙述中,正确的是( )。A 每个类最多只能有一个直接基类B 派生类中的成员可以访问基类中的任何成员C 基类的构造函数必须在派生类的构造函数体中调用D 派生类除了继承基类的成员,还可以定义新的成员该问题分值: 1答案:D本题考查派生类与基类的关系,派生类可以有多个直接基类,而派生类有三种继承方式,在私有继承中,派生类的成员并不能访问基类的成员。如果基类中定义了缺省构造函数或根本没有定义任何一一个构造函数时,在派生类构造函数的定义中可以省对基类构造函数的调用。所以本题答案为D。36. 结构化程序所要求的基本结构不包括( )。A 顺序结
25、构B GOT0跳转C 选择(分支)结构D 重复(循环)结构该问题分值: 1答案:B1966年Boehm和Jacopini证明了程序没计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。37. 将ER图转换为关系模式时,实体和联系都可以表示为( )。A 属性B 键C 关系D 域该问题分值: 1答案:C从ER图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,ER图中属性也可以转换成关系的属性。38. 下面是一个模板声明的开始部分:templatedouble由此可知( )。A 这可能是一个函数模板的声明B 这可能是一个类模板的声明C 这既可能是一个函
26、数模板的声明,也可能是一个类模板的声明D 这肯定是一个错误的模板声明该问题分值: 1答案:A本题考查函数模板和类模板的基础知识,从templatedouble这里就可以看出这是个函数模板的声明。39. 有如下程序:#includeusing namespace std;class AAint k;protected:int n;void setK(int k)this一k=k;public:void setN(int n)this一n=n;class BB:public AA/*类体略* ;int main()BB X;A n=1;/1B setN(2);/2C k=3;/3D setK(4)
27、;/4return 0;在标注号码的四条语句中正确的是( )。A 1B 2C 3D 4该问题分值: 1答案:B本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所以本题中n、k和setK变为了派生类的保护成员,不能直接使用,即1、3、4错误,所以B选项正确。40. 有如下头文件:int fl();static int f2();class MApublic:int f3();static int f4();在所描述的函数中,具有隐含的this指针的是( )。A f1B f2C f3D f4该问题分值: 1答案:C只有
28、类的非静态成员函数才隐含this指针。其作用域是类内部,当类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,而不必一定写上this。所以本题答案为C。二、基本操作题(18分)1. 请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl,该工程中包含程序文件mainepp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“/ERROR*found *”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:打开503号门门是锁着的,打不开。打开503号门的锁锁开了。打开503号门门打开了。打开503号门门是开着的,无须再开门。锁上503号门先关门门锁上了。注意:只修改每个“/ERROR*found *”下的那一行,不要改动程序中的其他内容。#includeusing namespace std;class Doorint Bum;/门号bool closed;/true表示门关着bool locked:/true表示门锁着public:Door(int nHm)/ERROR*fo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1