《2021年内蒙古自治区通辽市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2021年内蒙古自治区通辽市全国计算机等级考试C++语言程序设计真题(含答案).docx(39页珍藏版)》请在课桌文档上搜索。
1、2021年内蒙古自治区通辽市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、L选择题(10题)1.定义如下枚举类型enumMonday9Tuesday,Wednesday,Thrusday,Friday=2;则下列语句正确的是()。A.表达式Wednesday=Friday的值是trueB.Dayday;day=3C.Dayday;day=Monday+3D.Dayday;day=Tuesday+102 .有如下函数模板定义:templateTlsum(Tlal)return(al+a2+a3);)则以下调用中正确的是()。A.sum(5);B.sum(5);C.s
2、um(5);D.sum(5);3 .在数据库设计中,将E-R图转换成关系数据模型的过程属于()A.需求分析阶段B.概念设计阶段C逻辑设计阶段D.物理设计阶段4 .下列输出字符,A1的方法中,()是错误的。A.coutput(,A,);B.cout,A,;C.cort.put(,A);D.charA=A,;coutA;5 .下列描述中正确的是()oA.构造函数可以为虚函数,析构函数不可以为虚函数B.构造函数不可以为虚函数,析构函数可以为虚函数C.构造函数可以为虚函数,析构函数可以为虚函数D.构造函数不可以为虚函数,析构函数不可以为虚函数6 .以下程序执行后的输出结果是()。#includeusi
3、ngnamespacestd;voidtry(int,int,int,int);intmain()intx,y,z,r;x=l;y=2;try(x,y,z,r);coutrendl;return0;voidtry(intx,inty,intz,intr)Z=x+y;x=X*X;y=y*y;r=z+x+y;A.18B.9C.10D.不确定7 .以下程序的输出结果是#includevoidmain()charx=040;cout(Xnext=HL;B.p-next=HL;HL=P;C.p-next=HL;p=HL;D.p-next=HL-next;HL-next=p9 .有如下程序;#includ
4、eusingnamespacestd;classBasepublic;Base(inti)x=i;)voiddispaOcoutxprivate;intx;classDerived;publicBasepublic;Derived(inti);Base(i+10)x=i;)voiddispb()dispa();coutxendl;private;intx;);intmain()Derivedb(2);b.dispb();return0;运行的结果是()oA.2,2B.12,2C.12,10D.10,210 .如果关系R中有4个属性和3个元组,关系S中有3个属性和5个元组,则RXS的属性个数和元
5、组个数分别是oA.7和8B.7和15C.12和8D.12和15二、单选题(13题)11 .数据结构分为逻辑结构和存储结构,下列数据结构中不属于存储结构的是A.线性链表B.二叉链表C.栈与队列D.循环队列12 .有下列程序:#includevoidmain()inti,j;fbr(i=3;i=l;i)for(j=l;j=2;j+)printf(%d”,i+j);printf(nn);程序的运行结果是()oA.234B.43234554334C.23D.453434232313 .由于常对象不能被更新,因此A.通过常对象只能调用它的常成员函数B.通过常对象只能调用静态成员函数C.常对象的成员都是常
6、成员D.通过常对象可以调用任何不改变对象值的成员函数14 .若有如下类声明:ClassMyClasspublic:MyClass()Cout则对a数组元素的非法引用是().a02*lB.al3C.a4-20D.a0417 .派生类的成员函数不能访问基类的()。A.公有成员和保护成员B.公有成员C.私有成员D.保护成员18 .有如下程序:#include+usingnamespacestd;#includeusingnamespacestd;classBase(public:voidfun()coutBase:fun);classDerived:publicBase(public:voidfun
7、()(coutnDerived:funnfun()D.fun();19 .在C+语言中,打开一个文件就是将这个文件与一个什么建立关联?A.流B.类C.结构D.对象20 .在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是OA.()B.C.D.21 .下列有关类成员的叙述中,正确的是()。A.友元函数是类的成员函数B.类成员的默认访问权限是私有的C.类成员函数必须声明为公有的D.类的静态数据成员不能是常成员22 .数据流图中带有箭头的线段表示的是()。A.控制流B.事件驱动C模块调用D.数据流23 .已知类A有公用数据成员a,并重载了二运算符,且有Aobj2;constA*ptr
8、=newA;,则下列语句错误的是()。A.ptr-a=100;B.ptr=&obj2;C.ptr+;D.obj2=*ptr;三、2.填空题(12题)24 .常用的软件结构设计工具是结构图(SC),也称程序结构图。其中,用矩形表示,用带空心圆的箭头表示传递的是数据。25 .下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变。请填空。#include#includemain()(chara=,clanguage,t;一定是偶数个数inti,j,k;k=strlen(a);for(i=0;i=k-2;i+=2)for(j=i+2;j=k;j=j+2)if(1)(t=ai;a
9、i=aj;a|j=t;)coutaendl;)26 .耦合和内聚是评价模块独立性的两个主要标准,其中反映了模块内各成分之间联系的是【】。27 .重载的关系运算符和逻辑运算符的返回类型应当是【】。28 .强行排错法涉及的调试技术主要是【】和监视表达式。29 .虚基类说明格式如下:slass派生类名【】基类名30 .下列程序的运行结果是【Io#includeclassA(public:virtualvoiduse()coutinAn;);classBrpublicA(public:virtualvoiduse()coutinBn;);classC:publicB(public:virtualvoi
10、duse()coutuse()deleteobj;)31 .面向对象程序设计支持的3大特性为:封装性、继承性和【】。32 .关系数据库的关系演算语言是以【】为基础的DML语言。33 .下面程序的运行结果是【】#includeusingnamespacestd;intfun(intn)(staticintm=2;m=m+n;returnm;)intmain()(inta=3,b=4;intx;x=fun(a);x=fun(b);coutxendl;returnO;34 .C+中封装性、继承性和【】是面向对象思想的主要特征。35 .派生类对基类的继承有三种方式:,保护继承。四、程序改错题(10题)
11、36 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;-TC;);II*error*TC:TC(coutnConstructornn,n;i=0;)II*error*TC:display(tout,i=in,endl;)II*error*TC:TCCOUI,Destructor,endl:voi
12、dmainTCa;a.display;)37 .使用VC+6.0打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e11o*的下面。试题程序:#includevoidmain(inti=O;charstrl20;coutEnterastringendwith?.endl;II*e*or*cin.getline(strj120);II*e*or*while(str)(II*e*or*if(s
13、tri)=a)stri=stri-a+A;i+;)coutstrendl;return;)38 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*e*or*的下面,修改该语句即可。试题程序:#include(iostream.h)ClassTC(inti;public:TC;voiddisplay;TC;);!*error*TC:TCcoutConstructor,ni=0;!*error*TC:displaytouti=in,endh!*error
14、*TC:TCCOUIDestructorendl:voidmainTCa;a.display;39 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*eror*的下面。试题程序:#includeiostream.h)intmain(try(throw(error);)II*error*catch(chars)(coutsendl;)try(throw(int)0);)
15、I/*e*ror*catch(coutiendl;)try(throw(O);throw(error);)!*error*catchcoutERROR,endl;)returnO;)40 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*eror*的下面。试题程序:#includeclassTC(public:TC(inti)(number=i;)voidSetNumber(intm)(
16、number=m;)intGetNumberconstreturnnumber;VoidPrintconstcoutnumber=numberclassTC(I*error*/TC(inti)(m_i=i;)voidprint(cout5)!*/1+:04.print;coutendl;return;)42 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*erro
17、r*的下面。试题程序:#includevoidmain(inti=O;charstr120;coutEnterastringendwith?.,endl;I/*error*cin.getline(str,120);I/*error*while(str)(I/*error*if(stri)=a)stri=stri-a+A;i;)coutstrendl;return;43 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改
18、程序的结构,错误的语句在I!*error*卜试题程序:#include#include!1*e*or*usingstd;voidWriteFile(char*s)(Ofstreamoutl;II*e*or*outl.open(u1.txt,binaryapp);for(inti=0;si!=0;i+)II*error*outl.puts(si);)outl.close;)VoidClearFile(Ofstreamoutl;outl.open(,l.txtn);outl.close;)intmain(chars1024;ClearFile;coutpleaseinputastrin9:,end
19、l;cin.getline(s,1024);WriteFile(三);return;)44.使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在!1*error*白勺0Igj试题程序:#include#include|/*error*usingstd;VoidWriteFiIe(Char*s)Ofstreamoutl;|/*error*outl.open(,1.txt,binaryapp);for(
20、inti=0;si!=O;i+)!1*error*outl.puts(si);outl.close;VoidClearFileOfstreamoutl;outl.open(,1.txt);outl.close;intmainchars1024;ClearFile;coutpleaseinputastrin9:,endl;cin.getline(s,1024);WriteFile(三);returnO;45 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/*ero*的下面,修改该语句即可。试题程序
21、:#include!*error*voidmain!*error*intm=0142:!*error*intn=0X27:intq=32;coutmendhcoutnendl;coutqendl;return;五、综合应用题(2题)46 .请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeePCoPy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数Operator=,以实现深层复制。要求:“*666*之间不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数WriteTOFiIe已经编译为Obj文件,并且在本程序中调用。
22、/CDeepCopy.h#include#includeusingnamespacestd;classCDeepCopy(public:intn;动态数组的元素个数int*p;动态数组首地址CDeepCopy(int);CDeepCopy;CDeepCopy&operator=(constCDeepCopy&r);赋值运算符函数;voidwriteToFile(char);/main,cppinclude,CDeepCopy.hCDeepCopy::一CDeepCopydeleteP;CDeepCopy::CDeepCopy(intk)n=k:p=newintn;构造函数实现CDeepCopy
23、&CDeepCopy:Operator=(constCDeePCoPy&r)赋值运算符函数实现5*义叱叱*333*义*666*)intmain(CDeepCopya(2),d(3);a.pO=l;d.pO=666;对象a,d数组元素的赋值(CDeepCopyb(3);调用赋值运算符函数a.pO=88;b=a;coutb.pO;显示内层局部对象的数组元素)coutd.pO;显示d数组元素apO的值cout,dfadeaway;n”;couta.pO;/显示a数组元素a.pO的值WriteToFiIe();return0;47 .使用VC+6.。打开源程序文件3.cpp。其中类TC用于把文件输出到
24、屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件OUtLtXt和。ut2txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。把获得的输入文件的内容存储到bur中,并且用Ien记录下文件的长度。请在注释2后添加适当的语句。将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。(4)使用文件流对象打开输入文件in.txt
25、,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:include#includeincludestdlib.h)ClassTC(public:TC(char*fileName)(Ien=O;fstreaminfile;infile.open(fileName,ios:in);charch;while(coutch;)infile,close;)voidsplit(fstreamoutfilel;fstreamoutfile2;OUtfilel.open(outl.txt,ios:out);outfile2.open(out2.
26、txt,ios:out);inti=O:for(i=0;ilen/2;i+)(OUtfiIelbufi;)do()while(i!=len);OUtfilel.close;outfile2.close;)prwate:intlen;charbuf1024;;voidmain(/*4*TCobj;obj.split;return;六、3.综合应用题(2题)48 .使用VC6打开考生文件夹下的工程MyPrOj13。此工程包含一个源程序文件MyMain12.cpp程序中定义了两个类BaSe和DeriVed,但类的定义并不完整。请按要求完成下列操作,将类的定义补充完成:定义类shapes的保护成员X和
27、y,它们都是整型变量。请在注释“/*1*之后添加适当的语句。完成构造函数ShaPeS(intd,intw)定义,使类shapes的保护成员x、y分别初始化为d、w,并分别具有默认值0、Oo请在注释“*2*”之后添加适当的语句。完成类shapes的成员函数setvalue(intd,intW)的定义,shapes类的数据成员X和y分别被设置成d和w。请在注释“*3*”之后添加适当的语句。将类shapes的成员函数VOiddiSP()设置成纯虚函数。请在注释“*4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain13.叩P清单如下:/MyMa
28、in13.cpp#includeusingnamespacestd;classshapes*public:*2*voidsetvalue(intd,intw)(*3*)*4*);classsquare:publicShapes(public:voiddisp()(coutx*ysetvalue(10,5);ptr-disp();returnO;)49 .使用VC6打开考生文件夹下的工程MyProj9o此工程包含一个源程序文件MyMain9.cppo程序中定义了两个类Point和CirCle,但类的定义并不完整。请按要求完成下列操作,将类SamPIe的定义补充完成:类Circle是基类Point
29、公有派生宋的。请在注释“/*1*”之后添加适当的语句。完成构造函数CirCle(inta,intb,intc)的定义,采用初始化列表的方式使基类Point私有成员x、y分别初始化为a、b,类Circle的私有成员r初始化为co请在注释“/*2*之后添加适当的语句。完成类Circle的成员函数area。的类体外的定义。函数area的功能是计算出此圆对象的面积,即PI*r*r0请在注释“*3*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain9.cpp清单如下:/MyMain9.cpp#includeusingnamespacestd;#def
30、inePI3.14classPoint(private:intx,y;public:Point(inta,intb)(x=a;y=b;)intgetx()(returnx;)i11tgety()returny;);*1*(private:intr;public:*2*intgetr()(returnr;)doublearea(););doubleCircle:area()(*3*)intmain()(Circlecl(5,7,10);coutcl.area()endl;return0;参考答案1.A解析:本题考查枚举类型的定义和使用。枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意
31、以下几点:枚举类型的第一个常量默认值是O:枚举类型常量的值允许彼此相同:虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。根据以上知识我们可以得出B)、C)、D)选项都不正确。2 .A解析:本题考查的函数模板的使用,有时不能根据用户传进来的参数决定所有模板函数的值类型,如函数的返回值,还有用户希望自己指定参数类型,这时就需要显式地指出参数模板的类型,显示指定模板的类型格式为:返回值类型函数模板(参数表)。3 .CE-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。4 .A5.B解析
32、:构造函数不可以为虚函数,但可以调用虚函数;析构函数可以为虚函数。6.D解析:本题常见的错误解答是:把x=l,y=2代入到函数try中,逐步计算出r=8o最后得到r的输出值是8o下面是正确解答。根据程序逐步分析:程序中定义了一个名为try的void型函数,即函数try()没有任何返回值。而try()函数在主函数中是以一条独立语句的方式被调用的,且主函数最后输出变量r的值。但在主函数中,并没有对变量r赋值。在C+语言中,数据只能从实参单向传递给形参,称为按值传递。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值。所以,虽然在函数try。中,r的值为8,但它并不能传递给实参,当然最
33、终的输出肯定是不确定的随机数了。7.C解析:左移1位,相当于乘以2,题中的X的值是一个八进制数,转换为十进制数是32,再乘以2,X的值为64。8.B解析HL为链表的头指针。HL指示链表中第一个节点的存储位置,在表头插入一个由指针P指向的节点后,头指针指向P,P的指针域指向原链表中第一个节点9.B解析:tDerivedb(2)9以整数2实例化变量b,在执行Derived的构造函数时,以i+10即12去调用类Derived的父类的构造函数,将Base:x初始化为12,然后将DeriVed:X赋值为2。在执行b.dispb()时,先调用父类中的dispa,输出Base:x,即12,再输出DeriVe
34、d:x,即2,所以运行结果为“12,2”。10.B.c解析:线性链表是线性表的链式存储结构,二叉链表是二叉树的链式存储结构;栈与队列分别是特殊的线性表;循环队列是队列的一种顺序存储结构。可知,线性链表、二叉链表、循环队列均属于存储结构,而栈与队列属于逻辑结构。选项C为正确答案。12.DDo【解析】本题考查for循环使用。rn当i=3时,j可以取1和2,i+j分别是4和5,执行Printf(”n“)换行,i-为2。rn当i=2时,j可以取1和2,i+j分别是3和4,执行Printf(”n“)换行,i为1。rn当i=l时,J可以取1和2,i+j分别是2和3,执行PrintfCn)换行,i为0,不符
35、合循环,退出。13.A解析:本题考查了常对象与常成员函数的概念。使用COnSt关键字修饰的对象称为常对象,它的特点是不能被更新;使用COnSt关键字声明的成员函数称为常成员函数,它的特点也是不能更新对象的数据成员。因为其他成员函数没有这个限制,即可以更新对象的数据成员,所以通过常对象只能调用常成员函数而不能调用其他成员函数,而且常成员函数也只能调用常成员函数而不能调用其他成员函数,否则它们的特性就会被打破。故应该选择A。14.B本题考查默认构造函数和带参数的构造函数,题目中定义一一个对象a以及对象数组b2,共执行3次构造函数,对象指针不调用构造函数。所以本题答案为B。15.Bn重载运算符的规则
36、如下:c+不允许用户自己定义新的运算符,只能对已有的c+运算符进行重裁c+不能重载的运算符只有5个;重载不能改变运算符运算对象的个数;重载不能改变运算符的优先级和结合性;重载运算符的函数不能有默认的参数;重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c+的标准类型。所以答案为B。n16 .D17 .C解析:本题考查的知识点是:派生类对基类成员的访问。派生类对基类中各成员的访问能力与继承方式无关,其成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。18.B19.A解析:C+的I/O系统是通过一种称为流的机制来实现文件和控制台的I/O
37、操作。简单地说,在C+中,输入输出操作是通过流来完成的。而文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。每个文件流都应当与一个打开的文件相联系;关闭一个文件就是取消这种联系。20.C本题主要考查了类模版。类模板声明的语法形式是:template模板形参表class类名类成员声明21.B解析:此题考查的是类成员的有关概念。类的友元函数可以直接访问该类的所有成员,但它不是类的成员函数,故选项A)错误;类成员函数的访问权限可以声明为公有、保护、私有,故选项C)错误;静态数据成员的声明是使用关键字Static,它可以是常成员,故选项D)错误。22.D解析:数据流图是描述数据处理
38、过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要的图形元素与说明如下:加工(转换):输入数据经加工变换产生输出。数据流:沿箭头方向传送数据的通道,一般在旁边标注数据流名。存储文件(数据源):表示处理过程中存放各种数据的文件。源,潭:表示系统和环境的接口,属系统之外的实体。23.AAo【解析】本题考查COnSt修饰符的作用。注意,const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,Ptr可以重新指向新的对象,而ptra则无法被更新。24 .模块模块解析:矩形表示的是模块,箭头表示的是模块间的调用关系。用带实心圆的箭头表示传递的是控制信息,用带空心圆的箭头表示传递的是数据。25 .ajaij26 .内聚内聚解析模块之间的耦合表明两个模块之间互相独立的程度;模块内部之间的关系是否紧密,称为内聚,反映模块内各成分之间的联系。27 .bool28 .设置断点设置断点解析:这种调试方法是最常用也是最低效的,主要思想是通过”计算机找错”。例如:通过内