2021年辽宁省盘锦市全国计算机等级考试C++语言程序设计真题(含答案).docx
2021年辽宁省盘锦市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、L选择题(10题)1 .在下列程序的横线处填上适当的内容,使程序执行后的输出结果为ABCDo#include<iostream>usingnamespacestd;classApublic:A()cout<<'A'classB:public:B()cout<<'B'classCrvirtualpublicApublic:C()cout<<,C,;);classD:publicB,publicCpublic:D()cout<<,D,;);voidmain()Dobj;A.publicAB.privateAC.protectedAD.virtualpublicA2 .下面字符串中,不可以用作C+标识符的是()。A.caseB._test_cC.ReturnD.x_20083 .在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是A.后缀一元运算符B.前缀一元运算符C.无操作数的运算符D.二元运算符4 .下面描述正确的是()oA.类的普通成员函数可以操作常对象B.类的成员函数可以修改常对象C.只有常成员函数才可以操作常对象D.常对象可以被常函数更新5 .C+源晚间中包含的输入/输出头文件为()。A.stdio.hB.stdafx.hC.iostream.hD.stream.h6 .已知一函数的形参说明为inta11156,则与此等效的形参说明为()oA.intarrB.int5C.int*a6D.int(*a)67 .有如下类定义:classAAinta;public:intgetRef()constreturn&a;/intgetValue()constreturna;/voidset(intn)consta=zn;/friendvoidshow(AAaa)constcout<<a;/);其中的四个函数定义中正确的是A.B.C.D.8 .下列对模板的声明中,正确的是()。A.template<T>9 .template<classT1.T2>Clemplate<classTLclassT2>.template<classT1;classT2>10 ()既可重载为一元运算符,又可重载为二元运算符。A,“*,B."="C"=”和D.''*''和"*+”10深度为k的二叉树至多有oA2个结点B.28D结点C.2k-1结点D.2<kl>-1个结点二、单选题(13题)IL有如下程序:#include<iostream>Usingnamespacestd;ClassToypublic:Toy(Char*_n)strcpy(name,_n);count+;)Toy()count一一;)char*GetName()retumname;StaticintgetCount()returncount;)private:charname10;Staticintcount;;intToy:count=0;intmain()Toytl(nSnoopyn),t2(uMickeyu),t3(nBarbie);tout<<tl.getCount()<<endl:returnO;)运行时的输出结果是()oA.lB.2C.3D.运行时出错12.下列说法正确的是()。A.定义inta4=l,3;,则a0=1,al=3,a3的值不确定B.定义staticinta4;,则元素值不确定C.constintx;x=5;表示给常量X赋初值D.定义inta4;,则其元素的值是不确定的13 .当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为()。A.ios:inB.ios:outC.ios:inIios:outD.以上都不对14 .数据库系统的三级模式不包括()。A.概念模式B.内模式C外模式D.数据模式15 .有如下程序;#include<iostream>usingnamespacestd;classBasepublic:voidoutput()cout<<1;virtualvoidPrint()cout<<'B,;);classDerived:publicBasepublic:voidoutput()cout<<2;voidPrint()cout<<,D');intmain()Base*ptr=newDerived;ptr->output();ptr->Print();deleteptr;return0;)程序的输出结果是A.1BB.1DC.2BD.2D16 .在下列枚举符号中,用来表示“相对于当前位置“文件定位方式的是()oA.ios_base:curB.ios-base:begC.los_base:OutD.ios-base:end17 .模板参数表中参数使用的分隔符号是oA.,B.;C./D.以上都不是18 .下列对重载函数的描述中,错误的是()。A.重载函数中不允许使用默认参数B.重载函数中编译是根据参数表进行选择的C.不要使用重载函数来描述毫不相干的函数D.构造函数重载将会给初始化带来多种方式19 .下列虚基类的声明中正确的是()A.classvirtualBipublicAB.virtualclassB:PUbIiCAC.classB:publicAvirtualD.classBzvirtualpublicA20 .关于函数返回值类型和返回值表达式的类型的描述中,错误的是()。A.函数返回值类型决定了返回值表达式的类型B.函数返回值的类型是在定义函数时确定的,在函数调用时不能改变C.函数返回值的类型就是返回值表达式的类型D.函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成函数返回值类型21 .数据库设计中反映用户对数据要求的模式是()。A.内模式B.概念模式C外模式D.设计模式22 .有如下程序:#included<iostream>Usingnamespacestd;VOidfI(int&X,int&y)intz=x;x=y;y=z;)voidf2(intX,inty)intz=x;x=y;y=z;Jintmain()intx=10,y=26;fi(x,y);f2(x,y);cout<<y<<endl;returnO;)运行时的输出结果是()oA.10B.16C.26D.3623 .软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下列属于应用软件的是()oA.编译程序B.操作系统C教务管理系统D.汇编程序三、2.填空题(12题)24 .运算符重载仍然保持其原来的优先级、和o25 .使用ifstream流类定义一个流对象并打开一个磁盘文件与用使用fstream流类定义一个流对象并打开一个磁盘文件默认打开方式分别为和没有默认。26 .在树中,度为零的结点称为【】。27 .重载的运算符保持其原有的【】、优先级和结合性不变。28 .执行“cout<<char(A,+2)<<endl语句后,得到的输出结果为【】。29 .在数据的存储结构中,不仅需要存储各数据元素的信息,还要存放各元素之间的信息。30 .将一个函数声明为一个类的友元函数必须使用关键字【】。31 .已知程序的结果为123,请填空。#include<iostream.h>template<classT>classA(public:Tx,y,Z;voiddisplay()cout<<x<<n<'<<y<<,'n<<z;);voidmain()(A<int>al;【】al.display();32 .友元类的所有成员函数都是另一个类的【】。33 .C+语言的函数参数传递方式有值传递和【】、引用传递。34 .在面向对象方法中,属性与操作相似的一组对象称为【35 .在关系代数运算中,并、笛卡尔积、投影、选择和【】为基本的运算。四、程序改错题(1。题)36 .使用VC+6.O打开考生文件夹下的源程序文件1cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h>voidmaininti=O;charstr12O;cout<<"Enterastringendwith?.<<endl;I/*error*cin.getline(str,120);I/*error*while(str)(I/*error*if(stri)=a)stri=stri-a+A;i÷÷)cout<<str<<endl;return;37 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h>classTC(public:TC(inti)(number=i;)voidSetNumber(intm)(number=m;)intGetNumberconst(retumnumber;)VoidPrintconst(cout<<number=<<number<<endl;)private:intnumber;voidmain(II*error*TCobjhobjl.Print;TCobj2(3);!*error*objl.number=10;/*errc)r*%0*TC.SetNumber(l00);objl.Print;obj2.Print;)38 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;TC;*error*TC:TC(cout<<"Constructor"<<,";i=0;)I/*error*TC:display(tout<<"i=,<<i<<,<<endh)I/*error*TC:TC(COUI<<',Destructor"<<endl:)voidmain(TCa;a.display;)39 .使用VC+6O打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符"?''时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h>voidmain(inti=O;charstrl120;cout<<Enterastringendwith?.',<<endl;II*e*or*cin.getline(str,120);II*e*or*while(str)(II*e*or*if(stri)=a)stri=stri-a+A;i+;)cout<<str<<endl;return;40 .使用VC+6.0打开考生文件夹下的源程序文件1cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/*e*or*/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO(public:I*error*/Staticintn=O:CO(n+:)CO):!*error*/intCO:n;voidmainCOobj;COobj27;CO*C=NULL:c=&obj:I*error*eout<<C.n<<endl;cout<<CO::n<<endl;41 .使用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!=O;i+)(/*error*outl.puts(si);)outl.close;)VoidClearFile(Ofstreamoutl;outl.open(1.txt");outl.close;)intmain(chars1024;ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(三);returnO;42.使用VC+6O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*erro*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;-TC;);II*e110r*TC:TC(cout«nConstructorn«n,n;i=0;)II*error*TC:display(tout<<"i="<<i<<n,'<<endl;)/*error*TC:TCCOUI<<,Destructor"<<endl:)voidmain(TCa;a.display;)43.使用VC+6.。打开考生文件夹下的源程序文件Lcpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;)44.使用VC+60打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:9,8,7,6,5注意:错误的语句在/*error*/的下面,修改该语句即可。其他的语句不能修改。试题程序:#include(iostream.h>classTC!*error*/TC(inti)(m_i=i;)voidprint(cout<<-m_i«,;)public:intmainI*error*inti;TC04(10);while(i>5)!*er*Qr*/1+:04.print;cout<<endl;return;45.使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在I!*error*卜试题程序:#include<iostream>#include<fstream>!1*e*or*usingstd;voidWriteFile(char*s)(Ofstreamoutl;II*e*or*outl.open(u1.txt,binaryapp);for(inti=0;si!=0;i+)(Ii*e*or*outl.puts(si);outl.close;VoidClearFileOfstreamoutl;outl.open(,l.txtn);outl.close;)intmain(chars1024;ClearFile;cout<<pleaseinputastrin9:,'<<endl;cin.getline(s,1024);WriteFile(三);return;)五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生目录Proj3下的工程文件Proj3,此工程中包含一个源程序文件Proj3.cpp,补充编制c+程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于100O字节。要求:补充编制的内容写在“*“与"*“两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件Out.dat中,输出函数WriteToFile已经给出并且调用。/proj3.cpp#include<iostream>#include<fstream>#include<catting>usingnamespacestd;classdoc(private:char*sir;文本字符串首地址intlength;/文本字符个数public:构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse;/将字符序列反转一doc;voidWriteTOFiIe(Char.filename););doc:doc(charfilename)ifstreammyFile(filename);intIen=100l,tmp;atr=newchar1en;Iength=O;while(trap=myFile.get)!=EOF)strlength+=trap;strlength=O,;myFile.close;voiddoc:reverse将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换*666*doc:doedeletestr;voiddoc:writeToFile(char*filename)OfstreamoutFile(filename);outFile<<str;outFile.close;)voidmain(docmyDoc(,in.daf,);myDoc.reveme;myDoc.writeToFile(,out.daf,);)47.使用VC+6.O打开考生文件夹下的源程序文件3.cpp,其中定义了类A、Al和A2,其中Al类由A类公有派生,A2类由Al类公有派生。(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:publicA(intb;public:intgetbretumb;;classA2:publicAlintC;public:voidshow(/I*4*);voidmain(A2a(8.3.7):cout<<a.geta<<endl:cout<<a,getb<<endl:a.show;)六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj3。此工程包含一个源程序文件MyMain3.cpp,其中定义的类并不完整。请按要求完成下列操作,将类的定义补充完整。定义类Planet的保护数据成员distance和revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolve为im型。请在注释“*I*''之后添加适当的语句。定义类Earth的构造函数Earth(doubled,intr),并在其中计算地球绕太阳公转的轨道周长。假定:CirCUmferenCe=2*d*3.1416。请在注释“*2*”之后添加适当的语句。定义类Earth的成员show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释,*3*,之后添加适当的语句。文件MyMain3.cpp中源程序如下:/MyMain3.cpp#include<iostream>usingnamespacestd;classPlanet(protected:*public:Planet(doubled,intr)(distance=d;revolve=r;);classEarth:publicPlanet(private:doublecircumference;public:*2*3*);intmain()(Earthobj(9300000,365);obj.show;return0;49.使用VC6打开考生文件夹下的工程MyPrOj10。此工程包含一个源程序文件MyMainlO.cpp°程序中定义了两个类BaSe和DeriVed,但类的定义并不完整。请按要求完成下列操作,将类的定义补充完成:类Derived是基类Base公有派生来的。请在注释“/*1*”之后添加适当的语句。完成构造函数Derived(inti)定义,采用初始化列表的方式使基类Base私有成员a初始化为i+1,类Derived的私有成员b初始化为io请在注释“*2*”之后添加适当的语句。完成类Derived的成员函数ShOWO的类体外的定义。函数ShOW()中要显式调用基类的ShOW()函数,然后要输出私有成员b的值。请在注释“/*3*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMainIO.叩P清单如下:/MyMainlOxpp#include<iostream>usingnamespacestd;classBase(public:Base(intx)(a=xvoidshow()cout<<a;private:inta;);*1*(public:*2*voidshow();private:intb;);show()*b ;voidDerived(*3*)intmain()(Derivedd(l),Pb=&d;pb->show();returnO;参考答案1 .D解析:由主函数mian入手,定义了类D对象objo其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为“ABCD”,依次为类A,类B,类C,类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。2 .A解析:C+标识符是一个以字母或下划线开头的,由字母、数字、下划线组成的字符串。标识符不能与任何一个关键字同名,因此CaSe不能作为标识符。3 .B解析:本题考核运算符的重载。对于一元运算符参数表是空的,但是一元运算符'+'和即可以作为前缀运算符又可以作为后缀运算符。为了区分这两种情况,重载这两个运算符时必须在格式上有所区别:重载后缀的时必须多一个虚拟参数。所以答案为B。4 .C解析:只有常成员函数才可以操作常对象,常对象不可更新。5 .C6 .D解析:二维数组可以看作是一维数组的扩展。选项D表示的是一个一维数不清组,里面每个元素是一个指针,而指针肯定指向某个地址,从而完成二维数组的扩展。考生要注意选项C中*和口的运算优先级。7.B解析:本题考查了常成员函数和友员函数的一些概念。getRef()函数返回的是a的地址值&a,而函数类型却定义为int,C+中不允许隐式的将一个地址值类型转换为int类型,故选项A不正确。set()函数被定义为常成员函数,但在函数中给a赋值,改变了数据成员的值这是不允许的,故选项C错误。ShOW()函数被定义为AA类的友员函数,它不属于AA类而是一个全局函数。所以同时被定义为常成员函数是错误的。所以选项D不正确。故应该选择B。8 .C解析:本题考核模板的定义。模板定义的<类型参数表>中包含一个或多个由逗号分隔的类型参数项,每一项由关键词class后跟一个用户命名的标识符,此标识符为类型参数,它不是一种数据类型,但可以同一般数据类型一样使用。在使用类模板时,必须将其实例化,即用实际的数据类型代替它。9 .A10 .C11 .CCo【解析】析构函数主要用于最后函数的释放空间。本题在已输出tl.getCount后才调用即不影响所输结果。12 .D解析:当定义一个static数组时,虽未初始化,但元素值默认为0;对非static的数组,没有赋初值,则其元素中的值为不确定的;若赋初值但数据不够用,则其他元素值初始化为0。13 .D14 .D数据库系统的3级模式是概念模式、外模式和内模式。故答案为D选项。15.B16.AStreamoff定义于iostream,h中,定义有偏移量OffSet所能取得的最大值,seekdir表示移动的基准位置,是一个有以下值的枚举:ios:be9:(文件开头)、ios:cur:(文件当前位置)、ios:end:(文件结尾)。17.A18.AAo【解析】选项A中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。19 .D解析:本题考核虚基类的声明方式。虚基类说明格式如下:Virtual继承方式基类名其中,Virtual是虚基类的关键词。虚基类的说明是用在定义派生类时,写在派生类名的后面。即:class派生类名:Virtual继承方式基类名o20 .C21 .C数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。22 .AAo【解析】该题考查了函数参数传递的两种方式:引用传递和值传递,引用传递时X和y会交换,而值传递时二者不交换,因此选10。23.CCo【解析】编译程序和汇编程序继于开发工具;操作系统属于系统软件;而教务管理系统属于应用软件。24 .结合性语法结构结合性语法结构25 .ios:in26 .叶子结点叶子结点27 .操作符个数操作符个数解析:本题考查的是运算符重载的概念,用户重新定义的运算符不改变原运算符的优先性和结合性,也不改变运算符的语法结构.也就是说重载运算符不会产生新的运算符。28 .CC解析:输出结果为Co29 .前后件关系前后件关系解析在数据存储结构中,除了要存储数据,还要存储数据的前后件关系,对于顺序存储的数据结构,前后件之间的关系是通过存储空间的位置来实现的,而对于链式存储来说,数据元素之间的前后件关系是通过指针来实现的。30 .A或者friendA或者friend解析:友元的定义。31 .al.x=l;al.y=2;al.z=3;al.x=l;rnal.y=2;rnal.z=3;解析:通过程序的结果知道数据类型是int,所以调用时声明模板实参为int的,再对X,y.Z进行赋值。32 .友元函数友元函数解析:C+语言中友元类中的函数都是另一个类的友元函数。33 .地址传递地址传递34 .类类解析:在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。35.差差36.(1)应改为“ein.getline(str,120,?);,o应改为“while(St巾(3)应改为“if(Stri>=a&&striv=2)"°【解析】本题中要求以输入字符"?''为结束符,用于字符输入的流成员函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);,o第2处的“while(Str)”语句应该是判断字符串Str中的每一个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,则转换。所以应该修改为“while(St巾广。第3处的“if(stri>=a)”语句是判断字符stri是否为小写字符,而现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所以修改为if(stri>=astri>=z),o37 .(1)应改为"TCobjKl);(2)应改为“Objl.SetNumber(IO);,o(3)应改为“0bj2.SelNumber(100);【解析】本题第1处的“TCobjl;''语句是声明TC类的对象Obj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(l);-o第2处处的“objLnumber=10;”应该是调用成员函数SetNUmber赋值。在C+中成员函数的使用形式应该是:对象名成员函数,所以修改为objl.SetNumber(IO);,o类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNUmber(Io0);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为obj2.SetNumber(10