【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc

上传人:rimleave225 文档编号:1338138 上传时间:2019-10-17 格式:DOC 页数:15 大小:86.50KB
下载 相关 举报
【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc_第1页
第1页 / 共15页
【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc_第2页
第2页 / 共15页
【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc_第3页
第3页 / 共15页
【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc_第4页
第4页 / 共15页
【计算机类职业资格】计算机二级C++考试7+2015年及答案解析.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、计算机二级 C+考试 7+2015 年及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(每小题 1 分,共 40 小题,共 40 分(总题数:40,分数:40.00)1.在计算机中,算法是指( )。(分数:1.00)A.查询方法B.加工方法C.解题方案的准确而完整的描述D.排序方法2.下列叙述中,不属于测试的特征的是( )。 (分数:1.00)A.测试的挑剔性B.完全测试的不可能性C.测试的可靠性D.测试的经济性3.数据处理的最小单位是( )。(分数:1.00)A.数据B.数据元素C.数据项D.数据结构4.已知一个有序线性表为(13,18,24,35,47,50,62,83,9

2、0,115,134),当用二分法查找值为 90的元素时,查找成功的比较次数为( )。(分数:1.00)A.1B.2C.3D.95.下列对于软件测试的描述正确的是( )。(分数:1.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能地多发现程序中的错误D.软件测试的目的是使程序符合结构化原则6.下列选项中,不是一个算法的基本特征的是( )。(分数:1.00)A.完整性B.可行性C.有穷性D.拥有有足够的情报7.下列选项中不属于结构化程序设计方法的是( )。(分数:1.00)A.自顶向下B.逐步求精C.模块化D.司复用8.下列不是软件工程基本

3、目标的照( )。(分数:1.00)A.付出较低的维护费用B.达到要求的功能C.不管时间限制,只要最终把用户要求的产品交出来D.产品的性能比较好9.以三级模式为框架形成的三种数据库中,真实存在于计算机外存的数据库是( )。(分数:1.00)A.概念数据库B.用户数据库C.物理数据库D.逻辑数据库10.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS 之间的关系是( )。(分数:1.00)A.DB 包括 DBS 和 DBMSB.DBMS 包括 DB 和 DBSC.DBS 包括 DB 和 DBMSD.没有任务关系11.下列符号中可以用做 C标识符的是( )。(分数:1.00)A._radi

4、usB.foobarC.elseD.3room12.类模板的使用实际上是将类模板实例化成一个具体的( )。(分数:1.00)A.类B.对象C.函数D.模扳类13.下列有关类继承的叙述中,错误的是( )。(分数:1.00)A.继承可以实现软件复用B.虚基类可以解决由多继承产生的二义性问题C.派生类构造函数要负责调用基类的构造函数D.派生类没有继承基类的私有成员14.若有以下定义: inta=1,2,3,4,5,6,7; charc1=b,c2=2; 则数值不为 2 的表达式是( )。(分数:1.00)A.a1B.dc1C.a3-c2D.c2-015.已知 intm=10;在下列定义引用的语句中,

5、正确的是( )。(分数:1.00)A.intx=m;B.inty=m;C.intz;D.intt=m;16.针对数组定义 intdata10;,下列表述中错误的是( )。(分数:1.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组边界D.data 共有 10 个元素,其首元素是 data117.设有定义: classperson inthum; charname10; public: voidinit(intn,char*m); ; personstd30 则以下叙述不正确的是( )。(分数:1.00)A.std 是一

6、个含有 30 个元素的对象数组B.std 数组中的每个元素都是 person 类的对象C.std 数组中的每个元素都有自己的私有变量 num 和 nameD.std 数组中的每个元素都有各自的成员函数 init18.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:1.00)A.函数调用可以作为独立的语句存在B.函数调用可以无返回值C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参19.已知 Value 是一个类,Value 是 Value 的一个对象。 下列以非成员函数形式重载的运算符函数原形中,正确的是( )。(分数:1.00)A.Valueoper

7、ator(Valuev,inti);B.Valueoperator(Valuev=value,inti);C.Valueoperator(Valuevinti=O);D.Valueoperator(Valuev=value,inti=O);20.下列关于运算符重载不正确的是( )。(分数:1.00)A.运算符重载不能改变运算符的操作数个数B.运算符重载不能改变运算符的优先级C.运算符重载不能改变运算符的结合性D.运算符重载能改变对预定义类型数据的操作方式21.派生类对象对其基类中的什么成员是可访问的?( )(分数:1.00)A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.

8、保护继承的保护成员22.有如下程序: #included usingnamespacestd; classA public: virtualvoidfuncl()coutfunc1(); P-func2(); return0; 执行该程序,屏幕上将显示输出( )。(分数:1.00)A.B1B2B.A1A2C.B1A2D.A1B223.重载输人流运算符必须使用的原型为( )。(分数:1.00)A.istreamoperator(istream,);B.istreamoperator(istream,);C.istreamoperator(istream,);D.operator(istream,

9、);24.有如下语句序列: intk=0: dok=5;coutopen(“d:ofiletxt”);C.ofstreammyfile(“d:ofiletxt“);D.ofstream*myfile=new(“d:ofiletxt“);29.以下类定义中可能会引起错误的语句是( )。 classA public: A( )1 inti;2 private: intj;3 A(inti)i;4 ;(分数:1.00)A.1B.2C.3D.430.有如下程序: #include usingnamespacestd; classTestClass public: virtualvoidfunl() c

10、outfun2(); return0; 该程序执行后的输出结果是( )。(分数:1.00)A.funlTestClasslfun2TestClassB.funlTestClass1fun2TestC1ass1C.funlTestClassfun2TestClassD.funlTestClassfun2TestClassl31.有如下程序: #included usingnamespqcestd; classTestClass private; charC; public; TestClass(charn):c(n) TestClass() coutfunc1(); P-func2(); ret

11、urn0; 执行该程序,屏幕上将显示输出( )。(分数:1.00)A.B1B2B.A1A2C.B1A2 D.A1B2解析:【解析】程序中 B 为 A 的派生类,由主函数入手,主函数中定义了类 A 的指针 P 指向类 B。根据基类中的“virtualvoidfuncl()”知道 A 中的 funcl 为虚函数,执行“P-fund();”语句,通过指针变量调用此虚函数,此时调用的就是指针变量指向的同名函数,即派生类的 fund 函数,输出 B1。而 fun2 不是虚函数,所以执行“p-func2();”输出为 A2。23.重载输人流运算符必须使用的原型为( )。(分数:1.00)A.istream

12、operator(istream,); B.istreamoperator(istream,);C.istreamoperator(istream,);D.operator(istream,);解析:【解析】C流的输入运算符“”和输出运算符“(istream,);。24.有如下语句序列: intk=0: dok=5;coutopen(“d:ofiletxt”);C.ofstreammyfile(“d:ofiletxt“);D.ofstream*myfile=new(“d:ofiletxt“); 解析:【解析】本题考查文件对象的创建方法。可以直接定义文件对象,也可以用 new 来动态生成。很明显

13、,选项 D 中使用 new 的方式是错误的。29.以下类定义中可能会引起错误的语句是( )。 classA public: A( )1 inti;2 private: intj;3 A(inti)i;4 ;(分数:1.00)A.1B.2C.3D.4 解析:【解析】本题考查关于 C语言类的定义方法。在 C语言中类定义中的构造函数是私有的,但是却调用了其中的公有变量,在实例化时会斟现错误。30.有如下程序: #include usingnamespacestd; classTestClass public: virtualvoidfunl() coutfun2(); return0; 该程序执行后

14、的输出结果是( )。(分数:1.00)A.funlTestClasslfun2TestClass B.funlTestClass1fun2TestC1ass1C.funlTestClassfun2TestClassD.funlTestClassfun2TestClassl解析:【解析】TestClass 为基类,TestClass1 是 TestClass 的派生类。基类中的 funl 和 fun2 被定义为虚函数,C规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数,所以派生类中的 funl 和 fun2 也是虚函数。本题从 main 主函数入手,首先定义了 Test

15、Class 类型的对象obil 和指针 P,然后又定义了 TestClassl 的对象 obj2。指针指向对象 obj2,然后调用其成员函数 fun1(),即输出“funlTestClassl”。31.有如下程序: #included usingnamespqcestd; classTestClass private; charC; public; TestClass(charn):c(n) TestClass() cout ;classTestClassl:publicTestClass private: charC; public: TestClassl(charn):TestClass(

16、n1),c(n)TestClassl() cout ; intmain() TestClasslobj(X); return0; 执行上面的程序将输出( )。(分数:1.00)A.xy B.yxC.XD.y解析:【解析】本题中 FestClass 为基类,TestClass1 为派生类。在主函数中定义 TestClassl 对象obj(x),“TestClassl(charn):TestClass(n1),c(n)”,所以输出 x,然后调用基类构造函数,x1=y,所以输出 y,即答案为 xy。32.有如下程序: #include usingnamespacestd; classBase pub

17、lic: Base()cout“BB“;f(); voidf()cout“BF“; ; classDerived:publicBase public: Derived()cout“DD“; voidf()eout“Df“; ; intmain()Derivedd;return0; 执行上面的程序将输出( )。(分数:1.00)A.BBBfDD B.BBDfDDDfC.DDD.DDBBBf解析:【解析】本题考查类的继承和派生。派生类执行构造函数的一般次序为:首先调用基类构造函数;然后调用成员对象的构造函数;最后是派生类构造函数中的内容。题目中定义派生类对象 d 时,先调用基类 Base 的构造函

18、数,输出 BBBf,然后调用派生类 Derived 的构造函数,输出 DD。33.已知枚举类型定义语句为 enHmTokenNAME,NUMBER,PLUS=5,MINUS,PRINT=10; 则下列叙述中错误的是( )。(分数:1.00)A.枚举常量 NAME 的值为 1 B.枚举常量 NUMBER 的值为 1C.枚举常量 MINUS 的值为 6D.枚举常量 PRINT 的值为 10解析:【解析】本题考查 C语言的数据类型。第一个枚举常量的值为 0;允许程序显示的定义中指定部分或全部枚举常量的值,枚举常量默认时。在前一枚举常量值的基础上以此增 1。34.有如下程序: #include usi

19、ngnamespacestd; classBASE public: BASE()cout“BASE“; ; classDERIVED:publicBASE public: DERIVED()cout“DERIVED“; ; intmain()DERIVEDx;return0;) 执行后的输出结果是( )。(分数:1.00)A.BASEB.DERlVEDC.BASEDERIVEDD.DERlVEDBASE 解析:【解析】本题考查派生类的定义和使用。当对象被删除时,派生类的析构函数就被执行。由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构

20、函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。所以当 main 函数结束时,派生类 DERIVED 的对象 X 将被删除,那么派生类 DERIVED 的析构函数先被调用,输出 DERIVED,然后调用基类的析构函数输出 BASE。35.有如下程序: #include usingnamespacestd; classTest public: Test()n=2; Test()n-=3; staticintgetNum()returnn; private: staticintn; ; intTest:n=1; intmain() Test*p=neWTest; deletep;

21、cout“n=“ return0; 执行该程序的输出结果是( )。(分数:1.00)A.n=0 B.n=1C.n=2D.n=3解析:【解析】本题考查静态数据成员和静态成员函数。静态数据成员是类中所有对象共事的成员,而不是某个对象的成员。题目中的静态数据成员 n 的运算具有叠加性,执行“n=2”和“n-=3”后 n 的值为0。36.下列关于纯虚函数与抽象类的描述中,错误的是( )。(分数:1.00)A.纯虚函数是一种特殊的虚函数,它没有具体的实现B.抽象类是指具有纯虚函数的类C.一个基类声明了纯虚函数,该基类的派生类一定不是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出解析:

22、【解析】纯虚函数是在声明虚函数时被“初始化”为 0 的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。37.以下程序的输出结果是( )。 #include longfun(intn) longS; if(n=1n=2)s=2; elses=n-fun(n-1): returnS; voidmain()cout(分数:1.00)A.1 B.2C.3D.4解析:【解析】题中 fun 函数进行了递归调用,第 1 次调用对:fun(3)n=3,S=3-fun(2),第二次调用时:fun(2)n=2,s=2,返回第一次

23、调用后,s=3-2=1。38.对于模板定义关键字 class 和 typename 说法不正确的是( )。(分数:1.00)A.程序中的 class 并不能都替换为 typenameB.class 和 typename 都可互相替换 C.程序中的 typename 都能替换为 classD.程序中的部分 class 可以替换为 typename解析:【解析】在 C程序中,typename 是可以替换为 class 的,但 class 不能都替换为 typename。39.有如下程序: #include usingnamespacestd; classCon charID; public: Co

24、n():ID(A)cout intmain() Conc1: show(c1); Conc2(B); show(c2); return0; 执行上面程序的输出是( )。(分数:1.00)A.13A23AB.23A13BC.13A23B D.13823A解析:【解析】Eonc1 定义 c1 对象,调用 Con 的无参数构造函数,输出 1,ID 值变为 A,执行 show(c1)时会调用复制构造函数,将 c1 对象的值复制给 show 函数的形参,此时输出 3,然后在 show()中输出 c1的 ID 值 A,Conc2(B)定义 c2 对象,调用 Con(charID)构造函数,输出 2,c2

25、的 ID 值为 B,show(c2)执行时先调用复制构造函数输出 3,然后输出 B。因此程序输出结果为“13A238”。40.对于类定义: classA public: virtualvoidfuncl() voidfunc2() ;classB:publicA public: voidfuncl()cout“classBfunc1“ virtualvoidfunc2()cout“classBfunc2“ ; 下面正确的叙述是( )。(分数:1.00)A.A:func2( )和 B:func1( )都赵虚函数B.A:rune2( )和 B:func1( )都不是虚函数C.B:func1( )是

26、虚函数,而 A:fune2( )不是虚函数 D.B:func1( )不是虚函数,而 A:func2( )是虚函数解析:【解析】基类中说明的虚函数,在派生类中自然就是虚函数,所以类 B 中 funcl()是虚函数;而类A 中的 func2()没有被关键字 virtual 修饰;所以不是虚函数。二、程序改错题(18 分)(总题数:1,分数:18.00)41.使用 VC60 打开考生文件夹下的源程序文件 1cpp,该程序运行时有错,请改正程序中的错误,使程序输出的结果为 m=-10 n=-1O p 一 0 q=-10 z=A 注意:错误的语句在*error*的下面,修改该语句即可。 试题程序: #i

27、nclude voidmain() doublem=10: floatn=10: boolp=1; intq=10; charz=a: m=-m: *error* n=n; *error* P=-P: *error* q=q: z=z-32; cout“m=“ cout“n=“ cout“p=“ cout“q=“ cout“Z=“ return; (分数:18.00)_正确答案:( (1)“n=-n;”。 (2)“p=!p;”。 (3)“q=-q;”。)解析:【解析】由题目要求的运行结果可知,第 1 个标识和第 3 处的语句是对变量 n 和 q 取反,求一个正数的相反数可以通过算数运算符“-”

28、得到,第 1 处和第 3 处的语句应分别改为“n=-n;”和“q=-q;”,即只需要通过负号运算就可以实现。从题目要求输出的结果来分析,第 2 处的语句是对逻辑变量 P 取反,对一个逻辑变量求反,应该用取反运算符“!”,第 2 处的语句应改为“p=!P;”。三、简单应用题(24 分)(总题数:1,分数:24.00)42.使用 VC6 打开考生文件夹下的源程序文件 2cpp。阅读下列函数说明和代码,补充空出的代码。函数sum(intn)返回 1,2,3,n 的和。其中 n 大于 0。 程序要求使用递归实现上述功能。 注意:不能修改程序的其他部分,只能补充 sum 函数。 试题程序: #inclu

29、de #include intsum(intn) voidmain() cout“123100=“ endl; return; (分数:24.00)_正确答案:(return(n=1)?1:nsum(n-1);)解析:【解析】本题主要考查三目运算符?:的使用和递归函数的编制。程序功能是计算前 n 个自然数的和,n 为参数。程序的运算过程如下,不是一般性,假设 n 为 3,首先执行 sum(3),因为 3 不等于 1,所以 return 语句返回的值为 3sum(3-1),然后执行 sum(3-1)即 sum(2),2 不等于 1,所以 return 语句返回的值为 2sum(2-1),然后执行

30、 sum(2-1)即 sum(1),因为 1 等于 1,所以 return 语句返回的值为 1,即问号后的值,所以最终结果为 321=6,而题中 n 为 100,所以结果为 5050。四、综合应用题(18 分)(总题数:1,分数:18.00)43.使用 VC60 打开考生文件夹下的源程序文件 3cpp,其中定义了用于表示矩形的 CRect 类,但类 CRect 的定义并不完整。请按要求完成下列操作,将类 CRect 的定义补充完整。 (1)定义私有数据成员 leftPoint、topPoint、rightPoint、bottomPoint,分别用于表示矩形左上角及右下角的点的坐标,它们都是 d

31、ouble 型的数据。请在注释 1 之后添加适当的语句。 (2)完成默认构造函数 CRect 的定义,指定默认实参为 0,它们都是 double 型的数据。请在注释 2 之后添加适当的语句。 (3)定义函数体为空的析构函数。请在注释 3 之后添加适当的语句。 (4)在 main 函数中定义 GReet 类的实例rect2,并把 re- ct1 的值赋给 rect2。请在注释 4 之后添加适当的语句。 注意:除在指定位置添加语句之外,不要改动程序中的其他内容。 试题程序: #include classCRect private: *1* public: *2* *3* voidSetPoints

32、(double,double,double,double); voidSetLeftPoint(doublem)leftPoint=m; voidSetRightPoint(doublem)rightPoint=m; voidSetTopPoint(doublem)topPoint=m; voidSetBottomPoint(doublem)bottomPoint=m; voidDisplay(); ; CReet:CRect(double1,doublet,doubler,doubleb) leftPoint=1;topPoint=t; rightPoint=r;bottomPoint=b;

33、 voidCRect:Setpoints(double1,doublet,doubler,doubleb) leftPoint=1;topPoint=t; rightPoint=n;bottomPoint=b; voidCRect:Display() cout“left-toppointis(“ Point“)“right-bottompointis(“ voidmain() CRectrect0; rect0Display(); rect0SetPoints(20,206,30,40); rect0Display(); CRectrectl(0,0,150,150);rect1SetTopP

34、oint(105); rect1SetLeftPoint(105); *4* rect2Display( );(分数:18.00)_正确答案:( (1)应添加“doubleleftPoint,topPoint,rightPoint,hot-tomPoint;”。 (2)应添加“CReet(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=O);”。 (3)应添加“CReet()”。 (4)应添加“CReetrect2(rect1);”。)解析:【解析】本题在第 1 处完成私有数据成员 leftPoin

35、t、top-Point、rightPoint、bottomPoint 的定义,均为 double 型的变量,故第 1 处应添加“doubleleftPoint,topPoint,rightPoint,bottomPoint;”。构造函数完成成员变量的初始化,类CRect 的默认构造函数初始化 double 型私有数据成员 leftPoint、topPoint、rightPoint、bottomPoint为 0。故第 2 处应添加“CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。析构函数名和类名一致,并在前面加“”以和构造函数区别,该析构幽数体为空,故第 3 处应添加“CRect()”,虽然该函数体为空,但“”必须保留。主函数中类 CRect 的对象 rect2 是通过复制构造函数将 rect1 的值赋值给它实现初始化的而 reet1 的初始化直接调用自定义构造函数,第 4 处应添加“CReetrect2(rect1);”。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1