《2021年辽宁省大连市全国计算机等级考试C++语言程序设计测试卷(含答案).docx》由会员分享,可在线阅读,更多相关《2021年辽宁省大连市全国计算机等级考试C++语言程序设计测试卷(含答案).docx(41页珍藏版)》请在课桌文档上搜索。
1、2021年辽宁省大连市全国计算机等级考试C+语言程序设计测试卷(含答案)学校:班级:姓名:考号:一、L选择题(10题)1.()既可重载为一元运算符,又可重载为二元运算符。A,“*,B.=C.=”和“*D.“*”和*+”2 .有如下类的定义。那么空格处的语句是()。classMyClassintxjy;public:MyClass(intxl=0,intyl=O)x=xl;y=yl;staticvoidchange()x+=10;y+=10;A.staticB.constC.privateD.不需要填入内容3 .如果表达式-y中的-和“尸是作为友元函数重载的运算符,采用运算符函数调用格式,该表达
2、式还可以表示为A.operator/(x.operator-(),y);B.operator/(operator-(x),y);C.x.operator-().Operator/(y);D.y.operator/(operator-(x);4 .下列关于栈的描述,错误的是()。A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针5 .以下数据结构中不属于线性数据结构的是oA.队列B.线性表C二叉树D.栈6 .有如下程序;#includeusingnamespacestd;classDAintk;public:DA(intx=l):k(x)-
3、DA()coutopen(ud:Ofile.txf,);C.ofstreammyhle(ud:ofle.txf,);D.ofstream*mynle=new(d:ofile.txf,);21 .下列对字符数组进行初始化中,()是正确的。A.charsl=,abcd;B.chars23=,xyz;C.chars3=a,xy);D.chars423=,xyz,mnp,);22 .使用ifstream流类定义流对象并打开磁盘文件时,文件的隐含打开方式为()oA.ios:inB.ios:outC.ios:inlios:outA没有默认23 .有如下程序:#includeUsingnamespacest
4、d;ClassDemo(public:Demo()coutdefaultconstructorn;Demo(constDemo&x)cont,copyconstruc-torn,1;;DemouserCode(Demob)Democ(b);returnC;intmain()(Demoa;d;coutcallinguserCode()n”;d=userCode(a):returnO;)执行上面程序的过程中,构造函数Demo()和Demo(ConStDemO&x)被调用的次数分别是()。A.1和1B.1和2C.2和3D.2和4三、2.填空题(12题)24 .哈夫曼树是【】。25 .有以下程序:#i
5、ncludeusingnamespacestd;classBase(public:Base()(K=O;)intx;);classDerivedl:virtualpublicBase(public:Derivedl()(x=10;);classDerived2:virtualpublicBase26 .已知数组a中有n个元素,下列语句将数组a中从下标xl开始的k个元素移动到从下标x2开始的k个元素中,其中0=xlx2n,x2+k=xl;i)a=ai;27 .软件开发环境是全面支持软件开发全过程的集合。28 .继承的方式有公有继承、私有继承和【】3种。29 .软件测试的目的是尽可能发现软件中错误
6、,通常【】是在代码编写阶段可进行的测试,它是整个测试工作的基础。30 .派生类的成员一般分为两部分,一部分是【】,另一部分是自己定义的新成员。31 .是数据库设计的核心。32 .以下程序的执行结果是o#includeclassA(inta:public:voidseta(intx)a=x;voidshowa()coutaendl;);classBintb;public:voidsetb(intx)b=x;voidshowb()coutbend1;);33 .通过使用new和delete两个运算符进行的分配为【】存储分配。34 .假设inta=l,b=2;则表达式a+-b的值为【】。35 .多态
7、性分为两类:编译时的多态性和【】的多态性。四、程序改错题(10题)36 .使用VC+6.。打开考生文件夹下的源程序文件1cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:#includevoidmaininti=O;charstr12O;coutEnterastringendwith?.,endl;/*error*cin.getline(str,120);/*error*while(st
8、r)(/*error*if(stri)=a)stri=stri-a+A;i;)coutstrendl;return;)37 .使用VC+6.。打开考生文件夹下的源程序文件Lcpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:#includeiostream.h)intmain(try(throw(error);)II*error*catch(chars)(coutsendl;)try(th
9、row(int)0);)II*error*catch(coutiendl;)try(throw(O);throw(error);)/*error*catchreturnO;38 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*eor*的下面。试题程序:#includeclassTC(public:TC(inti)(numbe=i;)voidSetNumber(intm)(number
10、=m;)intGetNumberconst(returnnumber;)VoidPrintconstcoutnumber=numberendl;private:intnumber;);voidmain(!1*e*or*TCobjl;objl.Print;TCobj2(3);II*e*or*objl.number=10;II*ejor*TC.SetNumber(100);objl.Print;obj2.Print;)39 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100
11、注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:includeClassTC(public:TC(inti)(number=i;)voidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;)VoidPrintconst(cout,number=numberclassCOpublic:!*error*/Staticintn=O:COn+:COn-:!*error*/intCO:n;voidmainCOobj;COobj27;CO*C=NULL:c=&obj:!*err
12、or*/eoutC.nendl;coutCO::nendl;41 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*eror*的下面。试题程序:#includeiostream.h)intmain(try(throw(error);)I/*error*catch(chars)(coutsendl;)try(throw(int)0);)I/*error*catch(co
13、utiendl;)try(throw(O);throw(error);/*error*catch(cout,ERRORendl;)returnO;42 .使用VC+6.O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在II*error*8j。试题程序:#include#includeII*error*usingstd;voidWriteFile(char*s)(Ofstreamoutl;II*error*out
14、l.open(,1.txt,binaryapp);for(inti=0;si!=0;i+)II*error*outl.puts(si);)outl.close;)VoidClearFile(Ofstreamoutl;outl.open(,1.txt);outl.close;)intmain(chars1024;ClearFile;coutpleaseinputastrin9:endl;cin.getline(s,1024);WriteFile(三);returnO;)43.使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为C
15、onstructor,i=0,Destructor注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include(iostream.h)classTCinti;public:TC;voiddisplay;TC;1I*e*ror*TC:TCcout,Constructor,ni=0;!*error*TC:displaytouti=in,endh!*error*TC:TCCOUIDestructorclassTC!*error*/TC(inti)m_i=i;)voidprint(cout5)!*/1+:04.print;)coutendl;retum;)45.使用VC+6.。
16、打开考生文件夹下的源程序文件1cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/*ero*的下面,修改该语句即可。试题程序:#includeII*error*voidmain(/*error*intm=0142:/*error*intn=0X27:intq=32;coutmendl;coutnendl;coutqClassTCFruit(private:AoatWeight;StaticintAllNo;public:TCFruit(floatw)(AllWeight+=w:AllNo+:)TCFruit(AllWeight-=Weight:vo
17、iddisplaycoutSellaFruitwithWeight,k9endl;cout,Allsellnumber:AllNoendl;coutAllsellweight:AllWeightk9endlendl;);/*4*AoatTCFruit::AllWeight=O.0;intmain(TCFruitFruitl(l.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;returnO;)47.使用VC+6.。打开考生文件夹下的源程序文件3.cpp。类People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓名,然后输出这个
18、姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类的构造函数功能,请在注释1后添加适当的语句。(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。定义类的友元函数fun,请在注释3后添加适当的语句。(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:includeClassPeople(public:(inti;for(i=0:sUserNamei!=O;i)m_UserNamei=sUserNamei;)m_Old=nOld;)private:charm
19、_UserName32;intmOld;;voidfun(char*s,People&personl,People&person2(/I*4*if(for(inti=0;personl.m_UserNamei!=0;i+)(si=personl.m_UserNamei;si+l=0;)else(for(inti=O;person2.m_UserNamei!=0;i+)si=person2.m_UserNamei;si+l=0;)voidmain(chars32;Peoplepl(,abc,20);Peoplep2(def,30):fun(S,pl,p2);coutsendl:return;)六
20、、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test20_3,此工程包含一个源程序文件tes00_3.cpp,其中定义了用于表示复数的类ComP,但类comp的定义并不完整。请按要求完成下列操作,将类COmP的定义补充完整。定义COmP的构造函数,函数含参数X和y,它们都是in,型的数据,默认值都为0,请使用参数列表的形式分别将类数据成员a和b初始化X和y的值。请在注释“*1*”之后添加适当的语句。完成类ComP的成员函数input(intx,inty)的定义,将int型的参数X和y分别赋值给数据成员s和b,请在注释“*2*之后添加适当的语句;完成类COmP的友元函数frie
21、ndcompplus(comp&x,comp&y)的定义,该函数首先要定义一个comp类的对象C,然后将参数X和y的数据成员a与b分别相加并分别赋值给C的成员a和b,最后返回C的值,请在注释“*3*,之后添加适当的语句。输出结果如下:1020i2+3iresult:12+23i注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test20_3.cpp清单如下:#includeclasscomp(inta;intb;public:*friendcompplus(comp&x,comp&y);voidinput(intx,inty)()voidoutput()(COUta,+,
22、bniendl;compplus(comp&x,comp&y)(c.b=x.b+y.b;returnc;)voidmain()(compx(10,20),y,z;y.input(2,3);z=plus(x,y);x.output();y.output();coutresult:;z.output();49.使用VC6打开考生文件夹下的工程MyProj10。此工程包含一个源程序文件MyMainlO.cpp程序中定义了两个类BaSe和DeriVed,但类的定义并不完整。请按要求完成下列操作,将类的定义补充完成:类Derived是基类Base公有派生来的。请在注释“/*1*之后添加适当的语句。完成构
23、造函数Derived(inti)定义,采用初始化列表的方式使基类Base私有成员a初始化为i+1,类Derived的私有成员b初始化为io请在注释“*2*”之后添加适当的语句。完成类Derived的成员函数ShoWO的类体外的定义。函数ShOW()中要显式调用基类的ShOW()函数,然后要输出私有成员b的值。请在注释“*3*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMainIOCPP清单如下:/MyMainlOxpp#includeusingnamespacestd;classBase(public:Base(intx)(a=x)voids
24、how()(coutshow();return0;)参考答案1.A2A解析:静态成员函数与静态数据成员相似,也从属于类,只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数的定义前加上关键词Static0本题程序中把成员函数Change()定义成静态成员函数。由于静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。所以类的数据成员X和y也必须定义成静态数据成员。3.B解析:本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且cl、c2都是该类的对象,则cl.operato
25、r+(c2)与cl+c2含义相同。如果+作为该类的非成员函数重载,则OPeratOr+(cl,c2)与cl+c2含义相同。同理,运算符“尸作为友元函数重载,则G-X)/y与表达式OPeratOr/(-x),y)相同。前缀运算符作为友元函数重载,则-X与OPeratOr-(X)相同,所以组合起来是OPeratOr/(oPerator-(X),y);,即B选项。4.B解析:栈既能顺序存储,又能链式存储。5 .C解析:线性表、栈和队列所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,它只能在固定的一端进行插入和删除操作,又称后进先出表(LaStInFirStOut);队列是插入在一端进行
26、,删除在另一端进行的线性表,又称先进先出表(FirStInFirstOut)o6 .C解析:此题考查的是析构函数和对象的生存期。在主函数中,首先定义了一个DA类对象数组d,从初始化列表中可以看出,它包含3个对象;然后通过new运算符动态创建了一个DA类的对象数组,并将首地址赋给DA类指针p;接着通过delete。运算符销毁指针P所指向的数组,故此时会输出“11”。最后函数结束,销毁前面定义的对象数组d,会输出“333”。故最后的输出结果是11333。7 .D解析:数据的逻辑结构是对数据元素之间的逻辑关系的描述,它可以用一个数据元素的集合和在此集合中定义的若干关系来表示。数据的逻辑结构在计算机存
27、储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。但是不同的存储结构的数据的处理效率不同。8.B解析:C+基本的性质就是它的封装性,而封装性主要是靠类来实现的。9.D解析:首先,Std是对象数蛆,里面有30个对象,每个对象都有自己的私有数据成员,由于成员函数是公有的,在内存中存在一份即可,各个对象都可以使用。10D解析:面向对象语言的基本特性是封装,继承和多态。注意:垃圾回收是JaVa的主要特点。注意:要掌握面向对象的优点。1LC解析:在赋值操作中,将发生对象的拷贝操作,但并不说明两者是完全一样的
28、.一般情况下,如果绐类定义了赋值操作符,则应该同时定义合适的拷贝构造函数,除非系统默认生成的拷贝构造函数满足赋值操作。实际上,系统默认的拷贝构造函数仅仅将数据成员进行简单的对应赋值,而在多数特殊应用中,这么简单的对应关系是不适用的,这就需要程序员重新定义拷贝构造函数。12.D解析:一个类的友元函数对类成员的访问能力等同于类的成员函数,即能访问类的所有成员。13.B解析:软件工程概念的出现源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。总之,可以将软件危机归结为成本、质量、生产率等问题。14.A解析:在C+语言中,类和结构体有本质区别,类中包含数据及操作函数
29、,而结构体只包含有数据。15.BBo【解析】字串的定位操作通常称为串的模式匹配,是各种串处理系统中最重要的操作之一。16.A详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,所以A错误。17.B解析:本题考查的知识点是:构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任意的构造函数,就不会生成缺省构造函数了。故本题应该选择Bo18.A解析:根据题中给定的条件,可以作如下的模拟操作:元素a,b进栈,栈中有2个元素,分别为a,b;元素b出栈后,元素c,d进栈,栈
30、中有3个元素,分别为a,c,d;元素d,C出栈后,元素e,f进栈,栈中有3个元素,分别为a,e,f;最后,元素f,e,a出栈,栈为空。可以看出,进栈的顺序为a,b1c,d,e,f,出栈的顺序为b,d,c,f,e,a,满足题目要求。每次进栈操作后,栈中最多有3个元素,所以,为了顺利完成这些操作,栈的容量应至少为3。本题的正确答案为Ao19.A解析:此题考查的是派生类对基类成员的访问。基类的成员有公有保护和私有3种访问属性:类的继承方式也有公有继承、保护继承和私有继承3种。无论哪种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。20 .D解析:本题考查文件
31、对象的创建方法。可以直接定义文件对象,也可以用new来动态生成。很明显,选项D中使用new的方式是错误的。21 .A22 .DD。【解析】使用ifstream流类定义流对象并打开磁盘文件时,文件没有默认的打开方式。其中ios:in是为输入而打开;iso:out是为输出而打开。23 .CCo【解析】函数DemO为构造函数,而DemO(COnStDemo&x)为复制构造函数。C+在创建一个对象时,会自动调用类的构造函数,所以语句“Demoa,d;”将调用函数DemO2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句d=userC
32、ode(a);调用拷贝构造函数3次。24 .带权路径长度最小的二叉树带权路径长度最小的二叉树解析:哈夫曼树是带权路径长度最小的二叉树,又称最优二叉树。25 .20o20o解析:本题中,虽然DeriVedl和DeriVed2由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员X只存在一份拷贝,不论在类DeriVedl中修改,还是在类DeriVed2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derivedobi;”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derivedl的构造函数使得x=10,再执行类DeriVed2的构造函数,使得x=20最后输出X的
33、值为20o26.x2+i27 .软件工具软件工具解析:软件开发环境或称软件工程环境是全而支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。28 .保护继承保护继承解析:继承性是面向对象程序设计中最重要的机制,用户可以根据不同的需要选择3种不同的继承方式。29 .单元测试单元测试解析:单元测试集中对源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。30 .从基类继承的成员从基类继承的成员解析:派生类的成员由继承的成员和自己定义的成员组成。31 .数据模型数据模型解析数据模型是对客观事物及联系的数据描述,它反映了实体内部及实体与实体之间的联系。因此,数据模型是数据库设计的核心。32.1333.动态动态解析:本题考查的是对动态分配内存的掌握,在C+语言中,使用关键字HeW和delet