《2021年内蒙古自治区赤峰市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2021年内蒙古自治区赤峰市全国计算机等级考试C++语言程序设计真题(含答案).docx(27页珍藏版)》请在课桌文档上搜索。
1、2021年内蒙古自治区赤峰市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、L选择题(10题)1 .执行下列语句段后,输出字符“*”的个数是for(inti=50;i1;-i)coutA.48B.49C.50D.512 .软件维护指的是()。A.对软件的改正、适应和完善B.维护正常运行C.配置新软件D.软件开发期的一个阶段3 .有以下程序,其输出结果是()。#includeusingnamespacestd;intmain()chara10=,1,2,3,45,6,7,8,9,0,*p;inti=8;p=a+i;coutp-3endl;return0;A.6789B
2、.6C.789D.,64 .已知:intm=10:在下列定义引用的语句中,正确的是A.int&x=m;B.inty=&m;C.int&z;D.int&t=&m;5.关于类型转换的说法中,错误的是()。A.如果a为血型变量,b为Char型变量,则a+b的值为血型B.如果a为float型变量,b为int型变量,贝Ja-b的值为float型C.如果a为double型变量,b为float型变量,则a*b的值为double型D.如果a为血型变量,b为血型变量,则a/(double)b的值为int型6.C+语言中的基本数据类型是()。A.整型、浮点型、逻辑型、无值型和类类型B.整型、字符型、浮点型、无值型
3、和逻辑型C.整型、浮点型、字符型、逻辑型和枚举型D.整型、浮点型、逻辑型、无值型和指针型7 .有如下函数模板的定义:templateTfunc(Tx,Ty)returnx*x+y*y;在下列对func()的调用中,不正确的是()。A.func(3,5);8 .func(3,5);C.func(3,5.5);D.func(3,5.5);8 .下列程序的执行结果为#includevoidmain()inta=3,b=0;int*p=&a;b=+a+;cout*pbendl;A.3,4B.4,3C.3,4D.4,49 .阅读下面的程序:#includevoidmain()intx;cinx;if(x
4、+5)coutxendl;elsecoutxendl;如果两次执行上述程序,且键盘输入分别为4和6,则输出结果分别是()。A.4,6B.3,6C.417D.5,710 .关于关键字class和typename,下列表述正确的是A.程序中所有的typename都可以替换为classB.程序中所有的class都可以替换为typenameC.A)和B)都正确D.A)和B)都不正确二、单选题(13题)11 .有如下数组声明:intnum10;,下标值引用错误的是()oA.num10B.num5C.num3D.num012 .有如下类定义和变量定义:classParentspublic:intpubli
5、cuata;private:intprivateData;);classChildArpublicParents*类体略*;classChildBzprivateParents*类体略*/);ChildAa;ChildBb;下列语句中正确的是A.coutB.coutC.coutD.cout13 .假定MyQaSS为一个类,那么下列的函数说明中,()为该类的析构函数。A.voidMyCIassO;B.MyClass(int);C.MyClass();D.MyCIassO;14 .待排序的关键码序列为(33,18,9,25,67,82153,95,12,70),要按关键码值递增的顺序排序,采取以第
6、一个关键码为基准元素的快速排序法,第一趟排序后关键码33被放到第()个位置。A.3B.5C.7D.915 .设有Intx=Il;,则表达式(x+*2/3)的值是()。A.7B.8C.llD.1216 .下面程序的运行结果为()#includevoidswap(int&a,intb)inttemp;temp=a+;a=b:b=temp:Jvoidmain()inta=2,b=3;swap(a,b);couta1bendl;A.2,3B.3t2C.2,2D.3t317 .有如下程序:ftincludeusingnamespacestd;inti=l;classFunpublic:staticint
7、i;intvaluereturni1;intvalueconstreturni+1;);intFun:i=2;int intmain i=3;Funfunl;constFunfun2:return0;若程序的输出结果是:123则程序中下画线处遗漏的语句是()。Acoutfunl.valueFun:ifu2.value;B.toutFun:ifunl.valuefu2.value;C.coutfunl.valuefull2.valueFun:i:D.eoutfu2.valueFun:ifunl.value;18 .程序设计方法要求在程序设计过程中A先编制出程序,经调试使程序运行结果正确后再画出程
8、序的流程图B.先编制出程序,经调试使程序运行结果正确后再在程序中的适当位置处加注释C先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释D.以上三种说法都不对19 .有类定义如下:classTypepublic:TyPe(inti=0);Typeoperator-(int);friendTypeoperator+(Type,Type);private:intval;);若有对象定义TyPecl;则下列语句序列中,错误的是A.Type(3)+cl;B,cl+Type(3);C.3-cl;D.cl-3;20 .已知n是一个int型变量,下列语句中错误的是
9、()。A.long*p=newlongn;B.ongpn;C.long*p=newlong(n);D.longp10;21 .有如下函数定义:VOidfUnC(inta,int&B.a+;b+;)若执行代码段:intx=O,Y=1;fuC(X,Y);则变量X和y的值分别是()。A.0和1B.1和Ico和2D.1和222 .已知表达式+a中的”+”是作为成员函数重载的运算符,则与+a等效的运算符函数调用形式为OA.operator+(1)B.operator+(a)C.operator+(a,l).operator+()23 .下列关于类和对象的叙述中,错误的是()oA.一个类只能有一个对象B.
10、对象是类的具体实例C类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系三、2.填空题(12题)24 .阅读下面程序:#includeusingnamespacestd;intfun(inta,intb)(intc;c=a*b;returnc;)intmain()(inta=3,b=5,c=4,x=0;x=fu(fun(a,b),c);coutxendl;return0;)其运行结果是【25 .下列程序运行后的输出结果是o#includevoidmain()(ints=0,kfor(k=7;k=0;k-)(switch(k)(case1:case4:case7:s+;break:
11、case 2 :case 3 :case6:break;case0:case5:s+=2;break;)26 .软件结构是以【】为基础而组成的一种控制层次结构。27 .有以下程序段:#include#defineMIN(x,y)(x)(y)?(x):(y)voidmain()(iti,j,k;i=10;j=15;k=10*MIN(itj);coutkendl;)程序执行后的输出结果是【】。28 .下列程序在构造函数和析构函数中申请和释放类的数据成员int*a,申请时使用形参b初始化a,请填空。classA(public:A(intb);A();private:int*a;);A:A(intb)
12、(1;)A:A()(1;)29 .在面向对象方法中,描述的是具有相似属性与操作的一组对象。30 .派生类构造函数的执行顺序是先执行【】的构造函数,然后执行成员对象的构造函数,最后执行【】的构造函数。31 .在一个C+程序中,每个变量都必须遵循【】的原则。32 .以下程序段的输出结果是【】。intXti;for(i=l;i=100;i+)x=i;if(+x%2=0)if(+x%3=0)if(+x%7=0)couti,t;)33 .在下面横线上填上适当的语句,完成程序。#includeusingnamespacestd;classBase(intx;public:Base(inti)x=i;Bas
13、e()Q;classDerived:publicBase(public:完成类DeriVe构造函数的定义);intmain()(DerivedObj;return0;)在横线处应填入的语句是【34 .在面向对象方法中,类的实例称为35 .下面程序的输出是:*5.235.23*请将下划线上遗漏的部分补充完整。#include#includeusingnamespacestd;voidmain()doublei=5.23;coutsetw(14)icoutendlsetw(14)i;)四、程序改错题(10题)36 .使用VC+6.0打开考生文件夹下的源程序文件Lcpp,该程序运行有问题,请改正ma
14、in函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*crror*的下面。试题程序:ftincludeclassTC(public:TC(inti)(number=i;)VoidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;)VoidPrintconst(cout/number=znumberendl;)private:intnumber;:voidmain/*error*TCobjl;objl.Print
15、;TCobj2(3);/*error*objl.number=10;/*error*%o*TC.SetNumber(100);objl.Print;obj2.Print;37 .使用VC+6.0打开考生文件夹下的源程序文件l.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。不能删除assert()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:
16、#include#includeVoidmain()(char*sl=,abc:/*pQ*assert(sizeof(sl)=3):cout,sizeof(sl)=5endl;chars210=,ab:/*pQ*assert(sizeof(s2)=2);coutsizeof(s2)=10endl;chars3=23:/*pQ*assert(sizeof(s3)=4);cout,sizeof(s3)=lendl;return;)38 .使用VC+6O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1tx
17、t中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include#include/*fPQf*usingstd;voidWriteFile(char*s)(Ofstreamoutl;/*pQ*Outl.open(l.txt,binaryapp);for(inti=0;si!=0;i+)/*pQ*Outl.puts(si);)Outl.close;)VoidCIearFiIe(Ofstreamoutl;outl.open(l.txt);outl.close;)intmain(chars1024;CIearFiIe;coutp
18、leaseinputastri9:endl;ci.getline(s,1024);WriteFiIe(三);return;)39 .使用VC+6.0打开考生文件夹下的源程序文件Lcpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个CatCh必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动IIIain函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:ttincludeiostream,h)intmain(try(throw(,errorz*);)/*error*catch(chars)(coutsend
19、l;try(throw(int)0);/*error*catch(coutiendl;)try(throw(0);throw(error);)/*error*catch(coutz,ERROR,zendl;)returnO;)40 .使用VC+6.0打开考生文件夹下的源程序文件Lcpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动ITIain函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:ftincludevoidmain(inti=O;ch
20、arstr120;coutz,Enterastringendwith?.zzendl;/*error*cin.getline(str,120);/*error*while(str)(/*error*if(stri)=a)stri=stri-a+A;i+;)coutstrendl;return;41 .使用VC+6.0打开考生文件夹下的源程序文件l.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=lnumber=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#inc
21、ludeClassTC(public:TC(inti)(number=i;)voidSetNumber(intm)number=m;)IntGetNumberconst(returnnumber;)VoidPrintconst(coutnumber=numberendl;)private:intnumber;);Voidmain(/*fQf*TCobjI;objl.Print;TCobj2(3);/*fQ*objl.number=10;/*Qf*%Q*TC.SetNumber(100);objl.Print;obj2.Print;)42 .使用VC+6.O打开考生文件夹下的源程序文件Lcpp,
22、该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个CatCh必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:ftincludeiostream,h)intmain(trythrow(error);/*error*catch(chars)(coutsendl;try(throw(int)0);/*error*catch(coutiendl;)try(throw(0);throw(error);)/*error*catch(coutz,ERROR,zen
23、dl;)returnO;)43 .使用VC+60打开考生文件夹下的源程序文件1cpp本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeVoidmain(inti=O;charstr120;coutEnterastringendwith?.endl;/*Qf*cin.getline(str,120);/*(fQ*while(str)/*pQ*if(stri)=a)stri=stri-a
24、+A;i+;)coutstrendl;return;)44 .使用VC+6.0打开考生文件夹下的源程序文件Lcpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*Crror*的下面,修改该语句即可。试题程序:include(iostream,h)classTC(inti;public:TC;voiddisplay;TC;);/*crro*TC:TC(COUt“Constructor。,;i=0;)/*erro*TC:display(toutz4=,zi,zzendl;/*erro*TC:TC(COUIz
25、zDestructorzzclassCO(public:/*crror*/Staticintn=O:CO(n+:C0(n一:/*error*/intCO:n;voidmain(COobj;COobj27;CO*C=NULL:c=&obj:/*rror*/eoutC.nendl;coutCO::nClassTCFruit(private:floatWeight;StaticintAllNo;public:TCFruit(floatw)(/亭*亭*2*亭*亭亭Al!Weight=w:AllNo+:)TCFruit(/*3*AllWeight-=Weight:voiddisplay(cout/?Se
26、lIaFruitwithz,Weight,k9zzendl;coutwAllsellnumber:,AllNoendl;coutz,AlIsel!weight:,A1lWeight,zk9,zendlendl;/*4*floatTCFruit:AllWeight=O.0;intmainTCFruitFruitl(1.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;returnO;47 .应添加*BA(intm)a=m;o(2)应添加,PAI(itm,intn):BA()b=m;o应添力IluPA2(intm,intn,intk):PAI(
27、n,k)C=m;)。应添加coutgetagetbCendl;0【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构造函数的名称为BA1在BA中通过参数m完成对成员变量a的赋值,因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处的语句应添加BA(intm)a=m;)”。根据第2处的要求,构造函数的形式为,PAI(intm,intn),m赋值给PAl类成员b,将n作为基类BA构造函数的参数值传入,故第2处应添加PAl(intm,intn):BA(n)b=m;。根据第3处的要求,函数形式为PA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和
28、k分别赋值给基类PAI构造函数的参数m和n,因此第3处应添加“PA2(intm,intn,intk):PAl(n,kXC=m;。根据第4处的要求,PA2类公有派生于PAL而PAI公有派生于BA,因此在PA2类中可以调用基类的geta和getb来获得基类私有成员a和b,再输出PA2的私有成员C即满足要求,因此第4处应添加“coutgetagetbCendl;。六、3.综合应用题(2题)48 .使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3,cpp,其中定义了表示栈的类StaCk。源程序中StaCk类的定义并不完整,请按要求完成下列操作,将程序补充完整。定义类st
29、ack的私有数据成员sp和SiZe,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释7*1-之后添加适当的语句。完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-I(SiZe等于-1表示栈为空)。请在注释7*2*n之后添加适当的语句。完成类stack的成员函数push的定义。该函数将传入的整型参数X压入栈中,即在size小于数组的最大下标情况下,SiZe自力口L再给X赋值。请在注释*3*”之后添加适当的语句
30、。完成类StaCk的成员函数PoP的定义,该函数返回栈顶元素的值,即在SiZe不等于-1的情况下,返回数组中下标为SiZe的元素的值,并将SiZe减1。请在注释“*4*之后添加适当的语句。程序输出结果如下:thetopelem:1thepopelem:1thestackisempty注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test34_3.cpp清单如下:#includeclassstack(/*public:stack();boolempty()retursize=-1;boolfull()returnsize=99;)voidpush(intx);voidpo
31、p();voidtop(););stack:stack()(/*2*for(inti=0;i100;i+)*(sp+i)=0;size=-l;)voidstack:push(intx)(/*3*coutthestackisfulledl;else(size+;*(sp+size)=x;)voidstack:pop()(/*4*coutthestackisemptyendl;else(coutthepopelem:*(sp+size)endl;size-;)voidstack:top()(ifiempty()coutthestackisemptyendl;else(coutthetopelem:
32、*(sp+size)endl;)voidmain()(stacks;s.push(l);s.top();spop();s.top();)49 .使用VC6打开考生文件夹下的工程testl3_3。此工程包含一个testl3-CPp,其中定义了类VeCtor,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。完成构造函数的定义,把数据成员SiZe初始化为参数S的值,数据成员buffer指向动态申请的im型SiZe大小的空间。请在注释“*”之后添加适当的语句。完成拷贝构造函数的定义,注意解决多次删除的问题。请在注释“*2*之后添加适当的语句。完成成员函数eem的定义,该函数返回buffer的
33、第nd个元素的值,注意如果d超界,请输出uerrorinindex*10请在注释7*3*n之后添加适当的语句。完成析构函数的定义,要求先将字符d打印在屏幕上,再释放buffer指向的空间。请在注释之后添加适当的语句。输出结果如下:1234567891012345678910dd注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序文件testl3.3清单如下:#include#includeclassVector(public:Vector(ints=100);Vector(Vector&v);int&elem(intndx);voiddisplay();voidset();Vec
34、tor();protected:intsize;int*buffer;);Vector:Vector(ints)(|/*)Vector:Vector(Vector&v)(/*2*for(inti=0;isize;i+)(*(buffer+i)=*(v.bufferi);)int&Vector:elem(intndx)(/*3*(couterrorinindexendl;exit(l);)returnbufferndx;)voidVector:display()(for(intj=0;jsize;j+)coutelem(i)endl;)voidVector:set()(for(intj=0;il
35、;-i),i为502,故打印49个*。2 .A3 .A解析:没有下标的数组名是一个指向该数组首元素的指针,本程序实现的功能是将字符“6”及其以后的字符按字符串形式输出。4 .A解析:本题考核引用的定义。C+的引用是一种赋值、发送和返回复杂数据结构的方法,应用这种方法,系统不需要负担额外的开销,节省内存空间。建立引用的格式为:类型u3000&引用名=已定义的变量名;。所以只有A选项是符合要求的。5 .D解析:C+中数据类型转换有两类,即隐式类型转换和显式类型转换。隐式类型转换是由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算。赋值时,会
36、把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行。显式类型转换是由程序员显式指出的类型转换,使用显式类型转换的好处是,编译器不必自动进行两次转换,而由程序员负责类型转换的正确性。由此可知选项D中a/(double)b的值应为double型。6 .B7C解析:本题考核函数模板的使用。对于C)选项,编译系统从3获得的信息是“T对应于int”,从5.5处获得的信息是“T对应于double”,二者相互矛盾,在编译时会产生错误。对于D)选项中紧跟在函数名后的就是模板实参表,通过它通知编译系统在调用过程中,d。UbIe型的参数5.5将被自动换成int型。8.B解析:*p为所指对象
37、a的值,语句-b=+a+;”等价于,b=b+a;a=a+l;。9 .D解析:此题首先读入数值4赋给变量X,因为x+5不成立,因为“+”后缀,之后X的值变为5,执行语句CoUtx-5成立,所以执行语句Colltxendl;输出7。10 .A解析:本题考核模板的概念。C+中,模板形参具有三种形式:(Dtypename.(2)CIaSs,(3),前两种形式是等价的,在声明模板参数时,关键字typename和class可以互换。但是在定义类的程序中,关键字CIaSS代表的含义是类,此时不能用typename代替。ILAA。【解析】数组定义中的数字指的是数组的大小,而下标是从。开始的,所以数组的最后一个元素是num9o12.A13 .D解析:本题考核类的析构函数。在C+中,析构函数名为符号加类名,析构函数没有参数和返回值。根据以上知识可知,MyCIass类的正确析构函数的说明为MyClass()o14.BB.【解析】快速排序的基本思想是:从表中选取一个元素(如本题中的33),将表中小于此元素的移到前面,大于此元素的移到后面,结果把线性表分割成两部分(两个子表),此元素插入到其分界线的位置处。然后分别对两个子表再次分割本题中33作为分割的中界线,第一趟排序后排在比它小的18、9、25、12后面。15.A