2021年辽宁省丹东市全国计算机等级考试C++语言程序设计测试卷(含答案).docx
2021年辽宁省丹东市全国计算机等级考试C+语言程序设计测试卷(含答案)学校:班级:姓名:考号:一、L选择题(10题)1 .下列变量名中,合法的()。A)B)C)D)A.CHINAB.byte.sizeC.doubleD.A+a2 .程序中有如下语句for(inti=0;i<5;i+)cout<<*(p+i)<<,',";能够依次输出H型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是()oA.int*p=a;B.intp=a;C.*p=a;D.p=a;3 .属于关系的基本类型的是()oA.堆栈表B.视图表C.双列表D.散列表4 .不合法的main函数命令行参数表示形式是()。A.main(inta,char*clB.main(intarc,Char*arv)C.main(intargc,char*argv)D.main(intargy,char*argcJ)public:R(intrl,intr2)Rl=rl;R2=r2;voidprint();voidprintOconst;private:intR1,R2;voidR:print()cout<<Rl<<n,<<R2<<endl;voidR:print()constcout<<Rl<<,n<<R2<<endl;intmain()Ra(5,4);constRb(20,52);b.print();return0;执行后的输出结果是()。A.5,4B.20,52C.0,0D.4,56.关于this指针的说法错误的是()oA.this指针必须显示说明B.当创建一个对象后,this指针就指向该对象C.成员函数拥有this指针D.静态成员函数不拥有this指针7 .检查软件产品是否符合需求定义的过程称为oA.确认测试B.集成测试C.验证测试D.验收测试8 .关于ConSt修饰符的说法中,错误的是A.const既可以修饰成员函数,也可以修饰数据成员,还可以修饰对象B.若COnSt修饰了一个对象,则该对象中的所有数据成员都无法被更新C.常对象无法调用一般成员函数D.常成员函数只能被常对象调用,不能被一般对象调用9 .在inta=10,*p=&a;语句中,P的值是()。A.10B.变量P的地址C.变量a的地址D.随机数10.C+本身没有定义I/O操作,但I/O操作包含在C+实现中。C+标准库iostream提供了基本的I/O类。I/O操作分别由类istream和()提供。A.fistreamB.iostreamC.ostreamD.cin二、单选题(13题)IL下列关于数据库系统的叙述中正确的是()。A.数据库系统减少了数据冗余B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系统能管理更多的数据12.以下不使用线性结构表示实体之间联系的模型的是()。A.线性表B.栈和队列C.二叉树D.以上三个都不是32,若有以下程序:与include<iostream>usingnamespacestd;classprivate:inta;public:A(inti)<a=i;voiddisp()cout<<a<<*,f";classBprivate:intb;public:B(intj)b三j)3voiddisp()cout<<b<<classC:publicB«publicAprivate;intcpublic:C(intk)jA(k-2)B(k÷2)<c=k)voiddisp()(A:SdiSP()jB:disp();cout<<c<<endl;intmain()Cobj(10);obj.disp()ireturn0;)程序执行后的输出结果是(兀.10.10,10C8J0.1214 .下列叙述中错误的是()。A.在程序中凡是以“#”开始的语句行都是预处理命令行B.预处理命令行的最后不能以分号表示结束C.#defineMAX是合法的宏定义命令行DC+中预处理命令行的处理是在程序执行的过程中进行的15 .为用户与数据库系统提供接口的语言是A.高级语言B.数据描述语言(DDL)C.数据操纵语言(DML)D.汇编语言16 .建立一个有成员对象的派生类对象时,各构造函数体的执行次序为()。A.派生类、成员对象类、基类B.成员对象类、基类、派生类C.基类、成员对象类、派生类D.基类、派生类、成员对象类17 .若X和y是程序中的两个整型变量,则下列if语句中正确的是()oA.if(x=O)y=l;elsey=2;B.if(x=0)theny=lelsey=2C.if(x=O)y=1elsey=2;D.ifx=0y=1elsey=2;18 .下列程序的运行结果是()。#include<iostream.h>classLocationprivate:intX,Y;public:voidinit(int=0,int=O);voidvalueX(intval)X=val;intvalueXreturnx;voidvalueY(intval)Y=val;intvalueYreturnY;voidLocation:init(intinitX,intinitY)X=initX;Y=initY4voidmain(XLocationA,B;A.init;B.valueX(5);cout<<A.valueX<<endl<<A.valueY<<endl;B.init(6,2);B.valueY(4);eout<<B.valueX<<endl<<B.valueY<<endl;)A.5064B.0064C.5062D.006219 .开发大型软件时,产生困难的根本原因是()A.大系统的复杂性B.人员知识不足C.客观世界千变万化D.时间紧、任务重20 .下面是一个模板声明的开始部分:Template<typenameT>double.由此可知A.这可能是一个函数模板的声明B.这可能是一个类模板的声明C.这既可能是一个函数模板的声明,也可能是一个类模板的声明D.这肯定是一个错误的模板声明21 .Tilil程序的运行结果是()。#include<iostream.h>voidmain(inti=l:while(i<=8)if(+i%3l=2)continue:elseeout<<i;)A.25B.36C.258D.36922 .当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是()。A.A.任何B.公有或保护C.保护或私有D.私有23 .下列虚基类的声明中正确的是()A.classvirtualBipublicAB.virtualclassB:PUbliCAC.classB:publicAvirtualD.classBzvirtualpublicA三、2.填空题(12题)24 .为了便于对照检查,测试用例应由输入数据和预期的【】两部分组成。25 .下列程序的输出结果是【】#include<iostream>usingnamespacestd;intmain()(intBum=500;int&ref=num;ref+=100;cout<<num<<endl;returnO;)26 .执行语句序列intx=10.&r=x:cout<<x<<'-,<<r<<endl;输出结果为O27 .下面程序的输出结果为【】。#include<iostream>usingnamespacestd;voidinitialize(intprintNo,intstate=O);voidinitialize(intprintNo=l,intstate);intmain()initialize();return0;voidinitialize(intprintNo,intstate)cout<<printNo<<n,<<state<<endl;)28 .Staff类含有int型数据成员ID,两个Staff对象相等是指它们的ID相同。下面的函数重载了运算符=,它用来判断两个Staff对象是否相等,相等时返回true,否则返回falseo请将横线处缺失部分补充完整。boolStaff:Staff=(constStaff&s)(return();)29 .常见的需求分析方法有【】和面向对象的分析方法。30 .下面程序的运行结果是【】。#include<iostream>usingnamespacestd;classcount(staticintn;public:count()(n+;)staticinttest()for(inti=0;i<4;i+)n+;returnn;);intcount:n=O;intmain()(cout<<count:test()<<,;countcl,c2;cout<<count:test()<<endl;returnO;)31 .有如下程序:voidmain()(intx=2,y=3la,b,c,d;a=(x+>=y);b=(x=+y);c=(x-!=y);d=(+x>y);)则程序执行后变量a,b,c,d的值分别是32 .若有以下程序:#include(iostream)usingnamespacestd;classBase(public:Base()x=0;)intx;);classDerived1:virtualpublicBase(public:Derivedl()(x=10;);classDerived2:virtualpublicBase(public:Derived2()(x=20;);classDerived:publicDerived1,protectedDerived2();intmain()(Derivedobj;coutobj.x(endl;return0;)该程序运行后的输出结果是【33 .派生类中的成员不能直接访问基类中的成员。34 .求1100的和,可写成for(s=0,i=l;i+)s+=i;的形式。35 .派生类构造函数的执行顺序是先执行【】的构造函数,然后执行成员对象的构造函数,最后执行【】的构造函数。四、程序改错题(10题)36 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;TC;I/*error*TC:TC(cout<<"Constructor"<<,n;i=0;I/*error*TC:display(tout<<"i="<<i<<n,<<endh)I/*error*TC:TC(COUI<<Destructor"<<endl:)voidmain(TCa;a.display;)37.使用VC+6.。打开考生文件夹下的源程序文件Lcpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*ero*的下面。试题程序:#include<iostream.h)intmaintry(throw(nerror");)I/*error*catch(chars)(cout<<s<<endl;)try(throw(int)0);)I/*error*catch(cout<<i<<endl;)try(throw(O);throw("error);)/*error*catchcout<<"ERROR<<endl;returnO;38 .使用VC+6.0打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e11o*的下面。试题程序:#include<iostream.h>voidmain(inti=O;charstr120;cout<<Enterastringendwith?.,<<endl;II*e*or*cin.getline(strj120);II*e*or*while(str)(II*e*or*if(stri)=a)stri=stri-a+A;1+;cout<<str<<endl;return;39 .使用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:intmain!*e*0r*!inti;TC04(10);while(i>5)!*er*Qr*/1+:04.print;)cout<<endl;return;40.使用VC+60打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*e11o*的下面。试题程序:#include<iostream.h>classTC(public:TC(inti)number=i;voidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;)VoidPrintconst(cout<<number=,<<number<<endl;)private:intnumber;);voidmain(II*e*or*TCobjl;objl.Print;TCobj2(3);!1*e*or*objl.number=10;!1*ejor*TC.SetNumber(100);objl.Print;obj2.Print;41.使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;-TC;);II*error*TC:TC(cout«nConstructorn«n,n;i=0;)!1*error*TC:displaytout<<,i="<<i<<n,<<endl;II*error*TC:TC(COUI<<',Destructor"<<endl:)voidmain(TCa;a.display;)42 .使用VC+6.O打开考生文件夹下的源程序文件1cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/*ero*的下面,修改该语句即可。试题程序:#include<iostream.h>I/*error*voidmain(|/*error*intm=0142:I/*error*intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;)43 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/*eor*/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO(public:!*error*/Staticintn=O:con+:)co(n-:):I*error*/intCO:n;voidmain(COobj;COobj27;CO*C=NULL:c=&obj:I*error*/eout<<C.n<<endl;cout<<CO::n<<endl;)44 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:include<iostream.h>voidmain(inti=O;charstr120;cout<<"Enterastringendwith?.<<endl;/*error*cin.getline(str,120);/*error*while(str)(I/*error*if(stri)=a)stri=stri-a+A;i÷÷)cout<<str<<endl;return;45 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:include<iostream.h)intmain(try(throw("error);)/*error*catch(chars)(cout<<s<<endl;)try(throw(int)0);)/*error*catchcout<<i<<endl;try(throw(O);throw(error");)/*error*catch(cout<<',ERROR<<endl;)returnO;五、综合应用题(2题)46 .请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeePCoPy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数Operator=,以实现深层复制。要求:补充编制的内容写在“*333*“与“*666*"之间°不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数WriteToFiIe已经编译为Obj文件,并且在本程序中调用。/CDeepCopy.h#include<iostream>#include<string>usingnamespacestd;classCDeepCopy(public:intn;动态数组的元素个数int*p;动态数组首地址CDeepCopy(int);CDeepCopy;CDeepCopy&operator=(constCDeepCopy&r);赋值运算符函数;voidwriteToFile(char);/main,cppinclude,CDeepCopy.h''CDeepCopy::一CDeepCopydeleteP;CDeepCopy::CDeepCopy(intk)n=k:p=newintn;构造函数实现CDeepCopy&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;cout<<b.pO;显示内层局部对象的数组元素)cout<<d.pO;显示d数组元素apO的值cout<<,dfadeaway;n”;cout<<a.pO;/显示a数组元素a.pO的值WriteToFiIe('"');return0;47.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataLiSt类,是一个用于表示数据表的类。DataList的重载运算符函数Operator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个OPerator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“/*333*''与“/*666*''之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件。Utdato输出函数WriteToFiIe已经编译为。bj文件,并且在本程序中调用。/DataList.h#inClude<iostream>usingnamespaCestd;ClaSSDataLiSt数据表类intfen;double*d;public:DataList(intIen,doubledata=NULL);DataList(DataListcfedata);intIengthConstJretumIen;doublegetElement(inti)Consttreturndi;DataListoperator÷(ConstDataList&list)Const;两个数据表求和VoidshowConst;显示数据表);voidwriteToFile(Char$,ConstDataList&);/main.CppinClude,DataList.h''DataList::DataList(intIen,doubledata):len(ien)d=newdoublelen;for(inti=0;i<le11;i+)d()i=(data=NULL70.0:datai);)DataList::DataList(DataListcfedata):len(data.len)d=newdoublelen;for(inti=0;i<len;i+)di=data.di;DataListDataList::0perator+(Con8tDataList&list,)Const两个数据表求和double*dd=newdoublelist.Iensth;*333*666*returnDataList(list.length,dd);voidDataList::ShOWCOnSt显示数据表fr(intoi=0;i<len-l;i+)eout<<di<<,";Cout<<dlen-l<<endl;intmaindoublesl=1,2,3,4,5,6;doubles2=3,4,5,6,7,8;DataListlist1(6,si),list2(6,s2);定义两个数据表对象eout<v''两个数据表:"vvendl:listl.show:list2.show;eout<vendlw”两个数据表之和:,<<endl:(Iistl+list2).show;WriteToFiIelistl+list2);return0:六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test26.3o此工程包含一个test26.3.cpp,其中定义了类queue,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。完成类queue的无参数的构造函数的定义,要求把数据成员bl和el都初始化为0,同时输出queueinitialized。请在注释“*1*”之后添加适当的语句。(2)完成类queue的成员函数qput(intj)的定义,它的功能是把新的元素加入队列,过程是先依据bl的值判断数组是否已经满了,如果是就输出queueisfull,否则bl自加一,并且把参数j的值存入bl指向的数组元素中,请在注释“*2*“之后添加适当的语句。完成类queue的成员函数qget()的定义,它的功能是把队列开头的元素提取出队列,并返回该值,过程是先比较el和bl的值判断队列是否已空,如果是就输出queueisempty,否则el自加一,并且把el指向的数组元素返回,请在注释“*3*”之后添加适当的语句。程序输出结果如下:queueinitializedqueueinitialized33114422注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test26_3.cpp清单如下:#include<iostream.h>classqueue(intq100;intbl,el;public:queue();voidqput(intj);i11tqget(););queue:queue()voidqueue:qput(intj)(* * * /H*2*(cout<<"queueisfullnn;return;)bl+;qbi=j;)intqueue:qget()(H*3*(cout<<"queueisemptyn;returnO;)el+;returnqel;)voidmain()(queueaajbb;aa.qput(ll);bb.qput(22);aa.qput(33);bb.qput(44);cout<<aa.qget()<<<<aa.qget()<<',n;cout<<bb.qget()<<n,'<<bb.qget()<<,'n;)49.使用VC6打开考生文件夹下的工程test7.3l此工程包含一个源程序文件test7_3.cpp,其中含有一个类CirCIe的定义,但该类的定义并不完整。请按要求完成下列操作,将类CirCIe的定义补充完整。为类CirCle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radiuso将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。请在注释“*1*”之后添加适当的语句。(2)为类Circle增加一个成员函数Print(),使得可以输出有关圆的信息,比如下列程序Circlec;c.SetRadius(5);c.Print();将输出:Thecirclehasradiusof5!请在注释“*2*之后添加适当的语句。(3)完成友元函数voidCompareR(Circle*cl,Circle*c2)的定义,在屏幕中输出cl与c2比较radius大小结果,要求使用if-else结构完成。请在注释,之后添加适当的语句。输出结果如下;Thecirclehasradusof5!Thecirclehasradiusof10!cl<c2注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test7_3.cpp清单如下:#include<iostream.h>classCirclepublic:Circle():radius(5)*voidSetRadius(intr)radius=r;intGetRadius()returnradius;friendvoidCompareR(Circle*cl,Circle*C2);private:intradius;);voidCompareR(Circle*cl,Circle*C2)(*3*cout<<ncl>c2<<endl;elseif(cl->GetRadius()=(c2->GetRadius()cout<<ncl=c2<<endl;elseif(cl->GetRadiusO)<(c2->GetRadiusO)cout<<nc1<c2m<<endl;voidmain()Circled;cl.SetRadius(5);Cl.Print();Circlec2(10);c2.Print();CompareR(&c1,&c2);参考答案1.A2.A解析:从循环语句中可以看出,是在04的循环中输出数组a中的前,5个元素,输出的值为*(p+i),即为指针P向后移动指向的元素。所以初始化要将指针P指向数组a,即im*P=a;。3.B解析:数据库中关系的基本类型包括基本表、视图表和查询表。基本表是关系数据库中实际存在的表,是实际存储数据的逻辑表示,视图表是由基本表或其他视图表导出的表;查询表是指查询结果表或查询中生成的临时表。4.C5.B6 .A解析:在C+中,每个当前对象都含有一个指向该对象的this指针,this指针只能在类的成员函数中使用,其中静态成员函数不能够有this指针。7 .A本题主要考查软件测试的基本知识。软件测试的步骤可分为单元测试(模块测试)、集成测试、确认测试和系统测试。(1)单元测试是针对每个模块进行的测试,它可从程序的内部结构出发设计测试用例,多个模块可以平行、对立地测试。单元测试主要用于发现详细设计和编程时犯下的错误。单元测试多采用白盒测试,辅之以黑盒测试。(2)集成测试是在单元测试的基础上,根据模块结构图将各个模块连接起来,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。主要目标是发现与接口有关的问题。集成测试可以发现概要设计时犯的错误。(3)确认测试用于验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试主要用于发现需求分析时犯下的错误,一般使用黑盒法测试,以表明软件符合需求说明书的要求,应该仔细设计测试用例和测试过程。确认测试必须有用户参加,或以用户为主,用户应参与设计测试用例,通常情况下,主要使用生产中的实际数据进行测试,测试数据通过用户接口输入。(4)系统测试是将已经通过确认测试的软件,作为整个计算机系统的元素与计算机硬件、外设和网络等其他因素结合在一起,进行一系列的组装测试和确认测试。系统测试的目的是通过与系统的需求定义做比较,发现软件与系统的定义不符合的地方。系统测试可以发现问题定义时犯下的错误。8.D解析:本题考察const修饰符的含义及其修饰不同对象的规则。常成员函数既能被常对象调用,也能被一般对象调用,一旦COnSt修饰了一个对象,则对象的所有数据成员都无法更新。9.C10.C11 .A12 .C13 .D14 .D预处理命令是以开始的语句,每一条预处理命令必须单独占用一行.由于不是C语言的语句。并且命令行的最后不能以分号表示结束,定义格式为“#define标识符字符串”,预处理命令行是系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。15 .C数据定