《2021年辽宁省沈阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2021年辽宁省沈阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx(42页珍藏版)》请在课桌文档上搜索。
1、2021年辽宁省沈阳市全国计算机等级考试C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、L选择题(10题)1.关于函数的返回值,正确的是()。A.由return语句返回时,只带回一值,其类型在函数定义时确定B.其类型由调用表达式决定C.函数可以没有返回值,这时在函数定义中,函数的类型说明就没必要TD.函数调用就要有返回值,否则调用就没有意义了2“年龄在18-25之间”这种约束是属于数据库当中的A.原子性措施B.一致性措施C.完整性措施D.安全性措施3 .假定TeStCIaSS为一个类,则该类的拷贝构造函数的声明语句为()。A.TestClass(TestClassx)B.Test
2、Class(TestClassx)C.TestClass(TestClass*x)D.TestClass(TestClass&x)4 .下面程序应能对两个整型变量的值进行交换。以下正确的说法是#includevoidswap(intp,intq)intt;t=p;p=q;q=t;)voidmain()inta=10,b=20 ;cout a n , b ;swap(&a, &b);COUta,nb;)A.该程序完全正确B.该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可C.该程序有错,只要将swap()函数中的形参P和q以及t均定义为指针(执行语句不变)即可D.以上说法都不
3、对5 .在C+语言中函数返回值的类型是由()决定的。A.调用该函数时系统临时B.return语句中的表达式类型C.定义该函数时所指定的函数类型D.调用该函数时的主调函数类型6 .下列语句中不是死循环的是A.inti=10;while(l)i-;if(i=1)break;B.for(inti=l;i=0);D.inti=l;for(;)i=i+1;7 .下面描述中正确的是oA.virtual可以用于声明虚函数8 .含有纯虚函数的类不可以用来创建对象C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化8 .下列运算符中,不能重载的是A.?:B.+C
4、.-D.=9 .在inta=10,*P=&a;”语句中,P的值是()。A.10B.变量P的地址C.变量a的地址D.随机数10 .关于关键字class和typename,下列表述中正确的是A.程序中的typename都可以替换为classB.程序中的class都可以替换为typenameC.在模板形参表中只能用typename来声明参数的类型D.在模板形参表中只能用class或typename来声明参数的类型二、单选题(13题)11 .对于长度为n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确韵是()。A.冒泡排序为n/2B.冒泡排序为nC.快速排序为nD.快速排序为n(n-1)/
5、212 .下列关于继承方式的描述中,错误的是()。A.如果不显式地指定继承方式,默认的继承方式是私有(PriVate)B.采用公有继承方式时,基类中的公有成员在派生类中仍然是公有成员C.采用保护继承方式时,基类中的保护成员在派生类中仍然是保护成员D.采用私有继承方式时,基类中的私有成员在派生类中仍然是私有成员13 .下列描述中,不属于面向对象思想主要特征的是oA.封装性B.跨平台性C继承性D.多态性14 .下述关于数据库系统的叙述中,正确的是()。A.数据库系统减少了数据冗余B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系统能管理更多的数据15 .
6、有如下的程序:#includecstring.h)#ingcludeiostream.h)usingnamespacestd;ClassMyStringpublic:MyString(constcharts);MyString()deleteJdata;protected:unsignedIen;char*data;MyString:MyString(constchar*S)1A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的复制构造函数C.构造对象a时实参与形参类型不符D.系统不能生成默认的复制构造函数16.有如下程序:#includeusingnamespacestd
7、;classAAintk;protected:intn;voidsetK(intk)this-k=k;)public:voidsetN(intn)this-n=n;);classBB:publicAA*类体略*;intmain()BBx;x.n=l;/lx.setN(2);/2x.k=3;/3x.setK(4);/4return0;)在标注号码的四条语句中正确的是OA.lB.2C.3D.417 .对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为()oA.log2nB.n/2C.nD.n+118 .按照“先进先出”组织数据的数据结构是()。A.队列B.栈C.双向链表D.二叉树19
8、.关于关键字CIaSS和typename,下列表述中正确的是()。A.程序中的typename都可以替换为classB.程序中的class都可以替换为typenameC.在模板形参表中只能用ypename来声明参数的类型D.在模板形参表中只能用class或typenanle来声明参数的类型20 .有如下函数定义:voidfunC(inta,int&B.a+;b+;若执行代码段:intx=0,Y=I;funC(X,Y);则变量X和y的值分别是()。A.0和1B.1和1C.0和2D.1和221 .一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是()。A.l:1联系B.l
9、:m联系C.m1联系D.m:n联系22 .关于类和对象描述错误的是A.对象(ObieCt)是现实世界中的客观事物,对象具有确定的属性B.类是具有相同属性和行为的一组对象的集合C.对象是类的抽象,类是对象的实例D.类是对象的抽象,对象是类的实例23 .在三级模式之间引入两层映像,其主要功能之一是()oA.使数据与程序具有较高的独立性B.使系统具有较高的通道能力C.保持数据与程序的一致性D.提高存储空间的利用率三、2.填空题(12题)24 .若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为【】。25 .下列程序的输出结果是【】。#includeusingnamespacestd;
10、intmain()(intdata=l;int&r=data;data+=5;r+=5;coutdataendl;returnO;)26 .类test的析构函数是o27 .指针变量所保存的不是一般的数据值,而是程序中另一个对象的28 .若有以下程序:#includeusingnamespacestd;classTestClass1(public:TestClasslO(X=0;intx;);classTestClass2:virtualpublicTestClass1(public:TestClass2()(x=10;);classTestClass3:virtualpublicTestCla
11、ss1(public:TestCIass3()(x=20;);classTestClass4:publicTestClass2,protectedTestClass3();intmain()(TestClass4obj;coutobj.xendl;return0:)该程序运行后的输出结果是O29 .成员函数中不能直接引用类中说明的非静态成员。30 .有如下关系:学生(学号,姓名,性别,专业号,年龄),将属性年龄的取值范围定义在0-120之间符合【】。31 .为解决在多重继承环境中因公共基类带来的二义性问题,C+语言提供了【】机制。32 .使用如setw()的操纵符对数据进行格式输出时,应包含【
12、】文件。33 .用来派生新类的类称为,而派生出的新类称为它的子类或派生类。34 .类模板不同于函数模板,类模板只可用【】型参数。35 .下列程序的输出结果是【】。#includeusingnamespacestd;classbasepublic:intn;base(ihtx)n=x;virtualvoidset(intm)n=m;coutn;);classderiveA:publicbasepublic:deriveA(intx):base(x)voidset(intm)n+=m;coutn;:classderiveBpublicbasepublic:deriveB(intx):base(x)
13、voidset(intm)n+=m;coutnset(l);pbase=&d2;phase-set(2);returnO;四、程序改错题(10题)36 .使用VC+6.。打开考生文件夹下的源程序文件Lcpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:includevoidmain(inti=O;charstr120;coutEnterastringendwith?.endl;I/*error*
14、cin.getline(str,120);I/*error*while(str)/*error*if(stri)=a)stri=stri-a+A;i;)coutstrendl;return;)37 .使用VC+60打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在/*erro*的下面,修改该语句即可。试题程序:#include(iostream.h)classTC(inti;public:TC;voiddisplay;TC;);/*error*TC:TCCOUt”Cons
15、tructor。,n;i=0;)II*error*TC:display(tout,i=in,endl;)II*error*TC:TC(COUI,Destructorendl:)voidmain(TCa;a.display;38 .使用VC+6.O打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在I!*error*卜试题程序:#include#includeII*e*or*usingstd;voidWriteFil
16、e(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;)39 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,
17、并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.h)intmain(try(throw(error);)I/*error*catch(chars)(coutsendl;trythrow(int)0);/*error*catch(coutiendh)try(throw(O);throw(error);)I/*error*catch(coutERRORendl;)returnO;40 .使用VC+6.。打开考
18、生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/!*error*1Rj。试题程序:#include#includeI/*error*usingstd;voidWriteFile(char*s)(Ofstreamoutl;I/*error*outl.open(,1.txt,binaryapp);for(inti=0;si!=O;i+)(/*error*outl.puts(si);)outl.close;)VoidCl
19、earFile(Ofstreamoutl;outl.open(1.txtu);outl.close;)intmain(chars1024;ClearFile;cin.getline(s,1024);WriteFile(三);returnO;41.使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*eror*的下面。试题程序:#includeclassTC(public:TC(inti)(nu
20、mber=i;)voidSetNumber(intm)(number=m;)intGetNumberconstreturnnumber;VoidPrintconstcoutnumber=numberendh)private:intnumber;voidmain(I/*error*TCobjhobjl.Print;TCobj2(3);I/*error*objl.number=10;/*errc)r*%0*TC.SetNumber(l00);objl.Print;obj2.Print;)42 .使用VC+6.。打开考生文件夹下的源程序文件1(运行时有错。请改正程序中的错误,使程序输出的结果为100
21、3732注意:错误的语句在/*error*的下面,修改该语句即可。试题程序:#includeII*error*voidmain(II*error*intm=0142:II*error*intn=0X27:intq=32;coutmendl;coutnendl;coutqclassTC!*error*/TC(inti)(m_i=i;)voidprint(cout5)!*erj*r*i+:04.print;return;44 .使用VC+6.0打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把
22、结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*e11o*的下面。试题程序:#includevoidmain(inti=O;charstr120;coutEnterastringendwith?.endl;!1*ej*j0r*cin.getline(strj120);II*e*or*while(str)(II*e*or*if(stri)=a)stri=stri-a+A;1+;coutstrendl;return;45 .使用VC+60打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结
23、果为:sizeof(S1)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*eor*的下面。不能删除assert()语句。(2)只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain()(char*sl=,abcr,:1I*e*j*or*assert(sizeof(s1)=3):chars210J=,ab,:!1*e*0r*assert(sizeof(s2)=2);coutsizeof(s2)=10,endl;chars3=23:
24、!1*e*0r*assert(sizeof(s3)=4);coutsizeof(s3)=,endl;return;五、综合应用题(2题)46 .使用VC+6.。打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。定义类的公有数据成员函数NO、Name32,其中NO是int型的数据,Name32为字符型。请在注释1后添加适当的语句。完成函数Set的定义,分别设置NO和Name的值,请在注释2后添加适当的语句。完成函数Prin3请在注释3后添加适当的语句,输出结果如下:NO=12345Name=HelloWorld!(4)添加默认构造函数,设置NO为
25、0,Name为空,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeclassTCpublic:No=no;for(inti=0:strNamei!=O;i+)Namei=strNamei;Namei+1=0;voidprint()TCOII*4*);intmain()TCstu:stu.Set(12345,HelloWorld!1);stu.print();returnO;47 .使用VC+6.。打开考生文件夹下的源程序文件3cpp。类People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓名,然后输出
26、这个姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类的构造函数功能,请在注释1后添加适当的语句。(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。定义类的友元函数fun,请在注释3后添加适当的语句。(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeClassPeople(public:inti;for(i=0;sUserNamei!=O;i+)m_UserNamei=sUserNamei;)m_Old=nOld;)private:ch
27、arm_UserName32;intm_Old;voidfun(char*s,People&personl,People&person2(I/*4*if(fbr(inti=O;personl.m_UserNamei!=0;i+)(si=personl.m_UserNamei;si+l=0;elsefbr(inti=O:person2.m_UserNamei!=O;i+)si=person2.m_UserNamei;si+l=0;)voidmain(chars32;Peoplepl(abc,20);Peoplep2(def,30):fun(S,pl,p2);coutsendl:return;)六
28、、3.综合应用题(2题)48 .使用VC6打开考生文件夹下的工程test36,3o此工程包含一个test36.3.cpp,其中定义了类CReCtange但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)定义类CRectangle的数据成员width和height,它们都是int型的数据。请在注释“*1*之后添加适当的语句。添加类CRectangle的友元函数duplicate。的声明,其返回值类型和参数类型均为Crectangle的,请在注释“*2*“之后添加适当的语句。完成类Crectangle的成员函数set_values的定义,把传入的参数a和b分别赋值为数据成员widt
29、h和height,请在注释“*3*之后添加适当的语句。(4)完成派生类Crectangle的友元函数duplicate的定义把函数中的临时对象rectres的值返回主函数,请在注释“/*4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test36_3.cpp清单如下:#includeclassCRectangle(H*j*public:voidset_values(int,int);intarea(void)return(width*height);H*2*);voidCRectangle:set_values(inta,intb)*3* CRe
30、ctanglerectres;rectres.width=rectparam.width*2;rectres.height=rectparam.height*2;H*4*)voidmain()(CRectanglerect,rectb;rect.set_values(2,3);rectb-duplicate(rect);coutrectb.area()endl;49 .使用VC6打开考生文件夹下的工程test20_3,此工程包含一个源程序文件tesOO_3.cpp,其中定义了用于表示复数的类ComP,但类comp的定义并不完整。请按要求完成下列操作,将类COmP的定义补充完整。定义COmP的构
31、造函数,函数含参数X和y,它们都是in,型的数据,默认值都为Ot请使用参数列表的形式分别将类数据成员a和b初始化X和y的值。请在注释“*1*”之后添加适当的语句。完成类ComP的成员函数input(intx,inty)的定义,将int型的参数X和y分别赋值给数据成员s和b,请在注释“*2*之后添加适当的语句;完成类COmP的友元函数friendcompplus(comp&x,comp&y)的定义,该函数首先要定义一个comp类的对象C,然后将参数X和y的数据成员a与b分别相加并分别赋值给C的成员a和b,最后返回C的值,请在注释“*3*,之后添加适当的语句。输出结果如下:1020i2+3ires
32、ult:12+23i注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test20_3.cpp清单如下:#includeclasscomp(inta;intb;public:*friendcompplus(comp&x,comp&y);voidinput(intx,inty)()voidoutput()(COUta,+,bniendl;compplus(comp&x,comp&y)(*3*c.b=x.b+y.b;returnc;)voidmain()(compx(10,20),y,z;y.input(2,3);z=plus(x,y);x.output();y.output(
33、);coutresult:1;z.output();参考答案1.A解析:选项B函数返回值类型在函数定义时就确定了;选项C没有返回值用VOid标示;函数是完成特定功能的程序段,可以没有返回值。2 .C解析:对数据库各种特性必须有正确的理解。解析数据库的完整性是指数据的正确性和相容性(如学生的学号必须惟一,性别只能是女或男等),数据库是否具备完整性关系到数据库系统能否真实反映现实世界,因此维护数据库的完整性是非常重要的。注意:数据库的各种特性及表达形式。3 .D解析:C+中的拷贝构造函数是用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下:类名:类名(ConSt类名&);其中
34、COnSt可以省略C4 .D解析:本题应该把swap()函数改成这样:swap(int*P,int*q)intt;t=*p;*p=*q;*q=t;执行程序时,先将a的地址传递给指针变量p,b的地址传递给指针变量q,然后将*p(a的值)的值传递给t,将*q(b的值)传递给*p,将t的值传递给*q,从而将a值和b值互换。5 .C解析:本题考查对函数定义的掌握程度。函数类型决定了函数返回值的,类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。6 .A解析:选项A)中i自戒到1时就会执行break语句
35、跳出循环,选项B)中i0永远不会跳出循环,选项D)中未给出结束循环的条件。7 .A8 .A解析:在C+中,?:是唯一一个三目运算符,不能被重载。9 .C解析:一个指针是一个特定类型数据的存储地址,由于指针p已被赋值指向泊所以P的值就是整型变量a的地址。10 .A解析:本题考查了class和typename两个关键字。关键字class除了能用来定义类以外,还能用来声明模板的虚拟类型参数。在用作声明虚拟类型参数时typename与u3000class可以互换,但不能使用typename宋定义类。因此,选项B和C是错误的。在模板形参表中除了可以用typename或class声明虚拟类型参数外,还可以
36、使用普通类型声明常规参数,所以选项C是错误的。故本题应该选择A。11 .D12.DDo【解析】采用私有继承方式对。基类中私有成员在派生类中是不可访问的成员。13.B解析:面向对象思想的3个主要特征是:封装性、继承性和多态性。其中封装性是指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部;继承性是指一种事物保留了另一种事物的全部特征,并且具有自身的独有特征:多态性是指当多种事务继承自一种事物时,同一种操作在它们之间表现出不同的行为。14.A解析:数据库是一个通用化的、综合性的数据集合,它可以为各种用户所共享,具有最小的冗余度和较高的数据与程序的独立性,而且能并发地为多个
37、应用服务,同时具有安全性和完整性。即数据库系统减少了数据冗余,但不能避免一切冗余。所以选项A正确,选项B错误。在数据库管理阶段中,数据是结构化的,面向系统,数据冗余度小,从而节省了数据的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性。数据的不一致性,是指对数据的存取方式,选项C错误。数据库系统比文件系统能管理更多的数据,并非是数据库系统的特点,选项D错误。本题正确答案是A。I5.B解析:C+语宫中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数,语句,MyS-trmgb(a),”符合此条件将调用类MyString的复制构造函数,但是类MyString没
38、有定义此复制构造函数,所以会出错。16.B本题主要考查了派生类对象对基类成员的访问。类BB公有继承类AA,类AA的公有成员函数setN()成为类BB的公有成员,类AA的保护数据成员n和保护成员函数setK()成为类BB的保护成员,通过派生类对象只能访问派生类的公有成员,因此选项B正确,不能访问派生类的私有成员和保护成员,因此选项A和选项D错误;无论哪种继承方式,派生类BB的对象都不能访问基类AA中的私有成员,因此选项C错误。17.C本题考查的是顺序查找。在进行顺序查找过程中,如果线性表中的第一个元素就是被查找元素,则只需做一次比较就查找成功,查找效率最高;但如果被查找的元素是线性表中的最后一个
39、元素,或者被查找的元素根本就不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度为11的线性表进行顺序查找,在最坏情况下需要比较11次。故本题答案为Co18.A队列是一种特殊的线性表,只允许在表的一端插八元素,在表的另一端删除元素,插入元素的一端叫“队尾”,删除元素的一端叫“队头二先插入的元素先被删除,是按“先进先出”的原则组织数据的。【知识拓展队列”和“枝都是一种特殊的线性表。之所以称之为“队列”,其形式如“排队二要讲究“先来后到”,先进先出,后进后出。19.A程序中的typename都可以替换为class,但程序中的class不可以全部替换为
40、typenameo在模板类型形参中除了typename和class以外,也可以用常规类型来声明参数的类型,所以C、D选项错误。20.C函数参数的3种传递方式:将变量名作为形参和实参,即传值方式;传递变量指针;引用形参。本题中实参X为传值方式,所以X的值不会改变;Y为引用形参,所以会改变。故本题答案为C。21.D多对多联系:多对多的联系表现为一个表中的多个记录在相关表中同样有多个记录与其匹配。一个教师可讲授多门课程,一门课程可由多个教师讲授,所以实体教师和课程间的联系是多对多的联系。22 .C解析:C+中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象23 .AA.【解析】数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。使系统具有较高的通道能力和提高存储空间的利用率是操作系统的职能,而不是数据库管理系统的职能。在数据库系统中没有“数据和程序一致性”这一概念。24 .顺序存储结构顺序存储结构25.1