2021年辽宁省锦州市全国计算机等级考试C++语言程序设计真题(含答案).docx
2021年辽宁省锦州市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、L选择题(10题)1.若执行下面的程序时,从键盘上输入5和2,则输出结果是()oinclude(iostream.h)voidmain()inta,bjk;cin>>a>>b;k=a;if(a<B)k=a%b;elsek=b%a;cout<<k<<endl;A.5B.3C.2D.02 .在进行了任何C+流的操作后,都可以用C+流的有关成员函数检测流的状态,其中只能用于检测刚进行的操作是否失败函数名是()。A.failB.eofC.badD.good3 .以下函数调用语句中含有参数的个数是excc(vl,v2),(v2,v3,V4),v6);A.3B.4C.5D.64 .在“intb3=1,3,8),4,5,7,0;”中,b的值是(是A.0B.7C.lD.85 .分析下面程序,该程序的运行结果是()。#include<iostream.h>classcmmpublic:staticintm;cmm()m+;cmm(intn)m=n;staticvoidtestm()m+;intcmm:m=0;voidmain()cmmA;cmmB(3);A.testm();cram:testm;cout<<m=<<B.m<<endl;)A.m=3B.m=4C.m=5D.m=66 .关于静态数据成员的描述中正确的是()oA.类的静态数据成员不是类的所有对象共享的数据B.类的静态数据成员不能被类的成员函数调用C.类的静态数据成员不能被类的构造函数调用D.类的静态数据成员必须进行初始化7 .下列有关函数重载的叙述中,错误的是()。A.函数重载就是用相同的函数名定义多个函数8 .重载函数的参数列表必须不同C.重载函数的返回值类型必须不同D.重载函数的参数可以带有默认值8 .下列程序的输出结果为()0#include<iostream.h>#include<iomanip.h>voidmain()cout.precision(4);cout<<123.127;cout<<'''<<123.46:)A.123.1123.4B.123.1123.46C.123.127123.46D.123.1123.49 .函数模板:template<classT>Tadd(Tx,Ty)returnx+y;)下列对add函数的调用不正确的是A.add<>(1,2)B.add<int>(l,2)C.add(ll0,2)D.add(l.0,2.0)10 .在进行任何C+流的操作后,都可以用C+流的有关成员函数检测流的状态:其中只能用于检测输入流状态的操作函数名称是()。A.failB.eofC.badD.good二、单选题(13题)11 .下列说法中错误的是()A.公有继承时基类中的public成员在派生类中仍是public的B.公有继承时基类中的private成员在派生类中仍public是的C.私有继承时基类中的public成员在派生类中仍private是的D.保护继承时基类中的public成员在派生类中仍protected是的12 .下列运算符中,不能被重载的是()oA.B.!=C.D.+13 .有如下类定义:classMyClass(public:private:intdata;若要为MyClass类重载流输入运算符“>>”,使得程序中可以cin>>obj;”的形式改变MyClass类的对象Obj中数据成员data的值,则横线处的声明语句应为()。A.friendistream&operator»(istream&is,MyClass&A.;B.friendistream&operator»(istream&is,MyClassA.;C.istream&operator»(istream&is,MyClass&A.;D.istream&operator»(istream&is,MyClassA.;14 .下列说法正确的是()。A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字inline定义15 .下列选项中不属于结构化程序设计原则的是()。A.可封装B.自顶向下C模块化D.逐步求精16 .若变量已正确定义并赋值,以下符合C+语言语法的表达式是()OA.A.a:=b+1B.a=b=c+2C.intl8.5%3D.a=a+7=c+b17 .有如下程序:#include<iostream>usingnamespacestd;classAAintk;protected:intn;voidsetK(intk)this->k=k;public:voidsetN(intn)this->n=n;);classBBrpublicAA*类体略*;intmain()BBx;x.n=l;/lx.setN(2);/2x.k=3;/13x.setK(4);/4return0;)在标注号码的四条语句中正确的是A.lB.2C.3D.418 .以下函数值的返回值类型是()。fun(floatx)floaty;y=3*x-4;retumy;)A.intB.不确定C.voidD.float19 .有如下类模板定义:template<typenameT>classBigNumberIongn;public;BigNumberTi:n(i)BigNumberoperator+(BigNumberb)returnBigNumbern+b.n););已知bl、b2是BigNUmber的两个对象,则下列表达中踏误的是()。A.bl+b2B.bl+3C.3+blD.3+320 .若有下面的函数调用:fun(fl+b,3,max(n-1,B.)则fun的实参个数是()。A.3B.4C.5D.621 .数据库应用系统中的核心问题是oA.数据库设计B.数据库系统设计C.数据库维护D.数据库管理员培训22 .下面对于友元函数描述正确的是()。A.友元函数的实现必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员23 .若已定义intaJ=l,2,314,5,6,7,8,9,10.p=a,i=5;则对数组元素不正确的引用是()。A.ap-aB.*(&ai)C.piD*(*(a+i)三、2.填空题(12题)24 .数据流图采用4种符号表示()、数据源点和终点、数据流向和数据加工。25 .若有定义语句:inta=3,b=2,c=l;,则表达式b<b?a:b的值是。26 .二叉树的遍历分为三种,它们是前序遍历遍历和后序遍历。27 .类是一个支持集成的抽象数据类型,而对象是类的【】。28 .求1100的和,可写成for(s=0,i=l;i+)s+=i;的形式。29 .对有n个记录的表rL.n进行直接选择排序,所需要进行的关键字间的比较次数为O30 .下面程序输出的结果是o#include<iostream>usingnamespacestd;classApublic:virtualvoidshow()cout<<,A!;);classB:publicApublic:voidshow()cout<<nB!");classC:publicBpublic:voidshow()cout<<C!n;);voidshow_info(A&i)i.show。;voidmain()Aia;Bib;Cic;show_info(ia);show_info(ib);show_infb(ic);31 .若将一个二元运算符重载为类的成员函数,其形参个数应该是个。32 .若要打开二进制文件binfile写方式,输出到文件尾则应为:Ofstreambfile(,binfile,);33 .软件开发环境是全面支持软件开发全过程的集合。34 .下列程序中的重载函数disp()发生错误,错误原因是【】。#include<iostream,h>classSample(private:intm;staticintsr;public:Sample(inta)m=a;st+=a;staticvoiddisp()cout<<m<<endl;staticvoiddisp(Sampleinput)(cout<<input,m<<endl;);intSample:st=2;voidmain()SampleEirst(2),Second(4)Sample:disp();Sample:disp(Second);)35 .若要将一个模块的功能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成程序,应该在程序设计阶段采取【】和逐步求精的方法。四、程序改错题(10题)36 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:include<iostream.h)intmain(try(throw("error);)!*error*catch(chars)cout<<s<<endh)try(throw(int)0);)I/*error*catch(cout<<i<<endl;)try(throw(O);throw(error");)/*error*catch(cout<<',ERROR<<endl;)returnO;)37.使用VC+6.。打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/*e*or*/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO(public:I*error*/Staticintn=O:CO(n+:)CO(n:):I*error*/intCO:n;voidmain(COobj;COobj27;CO*C=NULL:c=&obj:!*error*/eout<<C.n<<endl;cout<<C0::n<<endl;38.使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h)intmain(try(throw(error");)I/*error*catch(chars)cout<<s<<endl;trythrow(int)0);)I/*error*catch(cout<<i<<endl;)try(throw(O);throw(error);)/*error*catch(cout<<"ERROR',<<endl;)returnO;39.使用VC+60打开考生文件夹下的源程序文件1.cppj该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1tt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在*error*卜试题程序:#include<iostream>#include<fstream>II*e*or*usingstd;voidWriteFile(char*s)(Ofstreamoutl;II*e*or*outl.open(1.txtu,binaryapp);for(inti=0;si!=O;i+)(II*ej*por*outl.puts(si);)outl.close;)VoidClearFile(Ofstreamoutl;outl.open(ul.txtu);outl.close;)intmain(chars1024;ClearFile;cin.getline(s,1024);WriteFile(s);return;)40.使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*ero*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;TC;);/*error*TC:TCcout<<',Constructor,<<",;i二。;)II*error*TC:display(tout<<"i="<<i<<n,"<<endh)II*error*TC:TC(COUI<<Destructor"<<endl:)voidmain(TCa;a.display;)41 .使用VC+6.0打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e11o*的下面。试题程序:#include<iostream.h>voidmain(inti=0;charstrl120J;cout<<Enterastringendwith?.',<<endl;!1*e*0r*cin.getline(str,120);!1*e*0r*while(str)!1*e*0r*if(stri)=a)stri=strij-a+A;1+;)cout<<str<<endl;return;42 .使用VC+6.O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include<iostream.h>!*error*voidmain!*error*intm=0142:!*error*intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;43 .使用VC+6.。打开考生文件夹下的源程序文件1cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*ero*的下面。试题程序:#include<iostream.h>voidmain(inti=0;charstr120;cout<<"Enterastringendwith?.<<endl;II*error*cin.getline(str,120);II*error*while(str)(II*error*if(stri)=a)stri=stri-a+A;i÷÷)cout<<str<<endl;return;)44 .使用VC+6O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:9,8,7,6,5注意:错误的语句在/*error*/的下面,修改该语句即可。其他的语句不能修改。试题程序:#include(iostream.h>classTC(I*error*TC(inti)(m_i=i;)voidprint(cout<<-m_i«,;)public:intm_i;intmain!*error*jinti;TC04(10);while(i>5)!*/1+:04.print;cout<<endl;return;45 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/!*error*1Rj。试题程序:#include<iostream>#include<fstream>!*error*usingstd;VOidWriteFile(Char*s)(Ofstreamoutl;/*error*outl.open(,'1.txt,',binaryapp);for(inti=0;si!=0;i+)(/*error*outl.puts(si);)outl.close;VoidClearFileOfstreamoutl;outl.open(,l.txt");outl.close;)intmain(chars1024;ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(三);returnO;五、综合应用题(2题)46.使用VC+6.。打开考生文件夹下的源程序文件3cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型变量AnN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量W的构造函数,并把这个W加到AIIWeight中,并且AnNO自加。请在注释2后添加适当的语句。(3)在析构函数中,在AlIWeight中减去Weigh3然后AnNO自减,请在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include(iostream.h>ClassTCFruit(private:AoatWeight;StaticintAllNo;public:TCFruit(floatw)(AllWeight+=w:AllNo+:)TCFruit(AllWeight-=Weight:voiddisplaycout<<SellaFruitwith<<Weight<<<,k9<<endl;cout<<,Allsellnumber:<<AllNo<<endl;cout<<Allsellweight:<<AllWeight<<k9"<<endl<<endl;);/*4*AoatTCFruit::AllWeight=O.0;intmain(TCFruitFruitl(l.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;returnO;)47.使用VC+6.。打开考生文件夹下的源程序文件3.cpp,其中定义了类A、Al和A2,其中Al类由A类公有派生,A2类由AI类公有派生。(1)定义类A的构造函数,该构造函数有一个整型的参数X,在构造函数中请将X赋值给数据成员a。请在注释“/*1*”之后添加适当的语句。(2)定义类AI的构造函数,该构造函数有两个整型的参数X和y,在构造函数中请将X赋值给数据成员b,将y作为基类A构造函数的参数值传人。请在注释“/*2*”之后添加适当的语句。定义类A2的构造函数,该构造函数有3个整型的参数X,y和z,在构造函数中请将X赋值给数据成员C,将y和Z分别赋值给基类Al构造函数的参数X和y。请在注释“/*3*”之后添加适当的语句。(4)完成类A2的成员函数ShOW的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值在输出时以空格隔开。请在注释“/*4*"之后添加适当的语句。程序输出结果如下:73738注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。试题程序:#include<iostream.h>classA(inta;public:intgetaretuma;;classAl:publicAintb;public:intgetbretumb;;classA2:publicA1intC;public:*,*3*voidshow/*4*;voidmainA2a(8.3.7):cout<<a.geta<<endl:cout<<a,getb<<endl:a.show;六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test2L3,此工程包含一个源程序文件test2L3.cpp,其中定义了用于表示长方形的类CReCtange但类CReCtangIe的定义并不完整。请按要求完成下列操作,将类CReCtangIe的定义补充完整。定义CReCtangle的构造函数,函数含参数dx,dy,da和db,它们都是double型的数据,请将类数据成员X,y,a和b初始化,并输出“CRectangleConstructed."(另起一行输出该文字)。请在注释“*1*之后添加适当的语句。完成类CRectangle的成员函数getperimeter()的定义,将以a和b为边的矩形周长的值返回,请在注释“*2*”之后添加适当的语句。完成类CRectangle的成员函数getarea()的定义将以a和b为边的矩形面积的值返回,请在注释“*3*”之后添加适当的语句。(4)完成类CRectangle的友元函数frienddoubledist(CRectangle&rt)的定义,先定义两个double型的临时变量tx和ty,然后将参数对象rt的数据成员X与a的一半相加,y与b的一半相加,分别赋值给tx和ty,最后求出tx与ty的平方和的值之后将它的平方根返回,将请在注释“*4*»之后添加适当的语句。输出结果如下:CRectangleConstructed.Down_Leftcornerpointis:(100,50)a=1200,b=700Perimeterofthisrectangleis:38OOAreaofthisrectangleis:840000TheDistanceis:806.226CRectangleConstructed.Down_Leftcornerpointis:(200,150)a=2000,b=800Perimeterofthisrectangleis:5600Areaofthisrectangleis:1.6e+006TheDistanceis:1320.04CRectangleDestructed.CRectangleDestructed.注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test21_3.cpp清单如下:#include<iostream.h>#include<math.h>classCRectangle(private:doublex;doubley;doublea;doubleb;public:CRectangleO(cout<<uXnCRectangleConstructed.*'<<endl;)CRectangle(doubledx,doubledy,doubleda,doubledb)*a=da;b=db;cout<<uXnCRectangleConstructed.*'<<endl;)CRectangle()(cout<<nCRectangleDestructed,1'<<endl;)voidputxy(doubledx,doubledy)x=dx;y=dy;voidputab(doubleda,doubledb)(a=da;b=db;doublegetx()returnx;doublegety()returny;doublegeta()returna;doublegetb()returnb;doublegetperimeter()()doublegetarea()()frienddoubledist(CRectangle&rt););doubledist(CRectangle&rt)(ty=rt.y+rt.b2.0;returnsqrt(tx*tx+ty*ty);)voidmain()(CRectanglerect;rect.putxy(100.0,50.0);rect.putab(1200.0,700.0);cout<<"DownJLeftcornerpointis:("<<rect.getx()<<n,n<<rect.gety()<<")n<<endl;cout<<na=',<<rect.geta()<<',b=<<rect.getb()<<endl;cout<<nPerimeterofthisrectangleis:<<rect.getperimeter()<<endl;cout<<"Areaofthisrectangleis:'1<<rect.getarea()<<endl;cout<<,49.使用VC6打开考生文件夹下的工程test24_3,此工程包含一个源程序文件test24_3.cpp,其中定义了抽象类point和它的派生类line,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。定义类point的构造函数,函数含参数i和j它们都是H型数据,默认值都是0,用i和j分别将point的数据成员x和y初始化。请在注释"*,之后添加适当的语句°完成类point的成员函数纯虚函数voidset()和voiddraw。的定义,请在注释“*2*''之后添加适当的语句。添加类Iine的构造函数,函数含参数i,j,m和n,它们都是int型数据,默认值都是0,用i和j分别将Poim的数据成员x和y初始化。请在注释“*3*”之后添加适当的语句。输出结果如下:line:set()called.注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test24_3.cpp清单如下:#include<iostream.h>classpoint(public:*protected:intx,y;classline:publicpoint(public:(xl=m;yi=n;)voidset()cout<<nline:set()called.n;voiddraw()cout<<Hline:draw()called.n;)protected:intxl,yl;);voidmain()(line*lineobj=newline;Iineobj->set();参考答案1.C解析:本题考查简单的ifelse语句。先执行条件if(a<b),显然不成立,则执行else语句。2 .A解析:C+中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数isopen。:判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回falseo函数good。:刚进行的操作成功时返回true,否则返回falseo函数fail。:与good()相反,刚进行的操作失败时返回true,否则返回falseo函数bad():如果进行了非法操作返回true,否则返回falseo函数eof()进行输入操作时,若到达文件尾返回true,否则返回falseo其中,eof函数只能用于输入流操作。3 .A解析:函数的参数个数是以第一层的逗号为区分的,本题中调用语句中有3个参数。4.B5 .C6 .D解析:C+类中的静态成员变量是该类中所有对象所共有的,它能够被类中的任何函数调用,所以选项A)、选项B)、选项C)是错误的。而类的静态数据成员是必须要进行初始化才能使用的。7 .C所谓函数重载是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数的名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。所以本题答案为c。8 .A9 .C解析:对于template<classT>Tadd(Tx,Ty)returnx+y;)调用时可以省略模板实参的声明,但是要求X和y的数据类型必须是一样的。10.B解析:C+中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数is_open():判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回falseo函数good。:刚进行的操作成功时返回true,否则返回falseo函数fail():与good(而反,刚进行的操作失败时返回true,否则返回falseo函数bad():如果进行了非法操作返回true,否则返回falseo函数eof()进行输入操作时,若到达文件尾返回true,否则返回falseo其中,eof函数只能用于输入流操作。11.B12 .Cc+不能重载的运算符只有5个,即$”、“:”、“?:”、sizeof,故本题答案为C。13 .A本题考查重载流运算符“>>”,根据重载规则,本题答案为A。14.B解析:本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,如果不加inline关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。15.AAo【解析】结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用got。语句等。16.BBo【解析】本题考查C+语言的正确赋值方法。a=b=c+2实际上相当于a=(b=c+2),进而可分解为两个表达式b=c+2和a=b。选项A中包含一个不合法的运算符":二";选项C应改为(int)18.5%3;选项D可理解为两个表达式a+7=c+b和a=a+7,其中第一个是错的,因为C+语言规定赋值号的左边只能是单个变量,不能是表达式或常量。17.B本题主要考查了派生类对象对基类成员的访问。类BB公有继承类AA,类AA的公有成员函数setN()成为类BB的公有成员,类AA的保护数据成员n和保护成员函数setK()成为类BB的保护成员,通过派生类对象只能访问派生类的公有成员,因此选项B正确,不能访问派生类的私有成员和保护成员,因此选项A和选项D错误;无论哪种继承方式,派生类BB的对象都不能访问基类AA中的私有成员,因此选项C错误。18.AAo【解析】本题考查C+当中函数的默认返回值类型,这种类型与函数内部的局部变量的类型没有关系。如果不小心处理函数返回类型,可能造成数据丢失。本题答案为A。19.CCo【解析】该题考查了C+模板类和+运算符重载的知识,3+bl时,程序