2021年辽宁省抚顺市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx
2021年辽宁省抚顺市全国计算机等级考试C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、L选择题(10题)1 .有以下程序:#include<iostream>usingnamespacestd;classsampleprivate:intx;public:sample(intA)x=a;frienddoublesquare(samples););doublesquare(samples)returnS.X*S.K;intmain()saA.20B.30C.900D.4002 .C+语言中标点符号中表示一条预处理命令开始的是A.#B.;C.*D.3 .下列运算符中,*运算符在C+中不能重载()。A.?B.+C.-D.<=4 .下面关于数组的初始化正确的是()。ACharStr='a','b',C,B.charstr2=4a,j'b','c'C.charstr23:4a,j'b','c',C)e,TD.charstr():4a,j'b',c,5 .()既可重载为一元运算符,又可重载为二元运算符。A,“*,B."=“C"=“和"*''D.''*''和"*+”6 .若有以下程序段:inta=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);cout<<a<<,n<<b<<',<<c<<endl;其输出结果是A.3,0,-10B.0,0,5C.-10,3,-10D.3,0,3已知n一个Int型变量,下列语句中错误的是A) long*p=newlongn;B) longpn;C) long*p=newlong(n)?7 .D)longd10?8 .假定MyClaSS为一个类,则该类的拷贝构造函数的声明语句为()。A.MyClass&(MyClassx);B.MyClass(MyClassx)C.MyClass(MyClass&x);D.MyClass(MyClass*x)9 .下列关于虚基类的描述,错误的是()oA.设置虚基类的目的是为了消除二义性B.虚基类的构造函数在非虚基类之后调用C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数10 .按照标识符的要求,下列选项中,()符号不能组成标识符。A.连接符B.下划线C.大小写字母D.数字字符二、单选题(13题)11 .字符串常量"hello”的字符个数是()。A.3B.4C.5D.612 .当调用函数时,实参是一个数组名,则向函数传送的是oA.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值13 .在下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。A.外模式B.内模式C.概念模式D.逻辑模式14 .下列语句中错误的是()。A.Constinta;B.Constinta=10;C.Constint*point=0;D.Constint*point=newint(10);15 .如果表达式“-X/y”中的"和"/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为()。A.operator/(X.operator-(),y);B.operator/(operator-(x),y);C.X.operator-().operator/(y);D.y.operator/operator-(x);16 .类MyClass的定义如下:classMyClasspublic:MyClass()MyClass(inti)value=newint(i);int*value;若要对value赋值,则下面语句正确的是()。A.MyClassmy;my.value=10;B.MyClassmy;*my;*ValUe=Io;C.MyClassmy;my.*value=10;D.MyClassmy(10);17 .有如下程序:#include<iostream>usingnamespacestd;classPairintm;intn;public:Pair(inti,intJ):m(i),n(J)booloperator>(PairP)const;/需在类体外给出定义;intmain()Pairpl(3,4),p2(4,3),p3(4,5);COUt<<(pl>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);return0;)运算符函数OPerator>功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大;当m相等时比较n.n大者为大。程序输出0101,下列对运算符重载函数的正确定义是A.boolPair:operator>(PairP)constif(m!=P.m)retumm>P.m;returnn>P.n;)B.boolPair:operator>(PairP)if(m!=P.m)returnm>P.m;returnn>P.n;)C.boolPair:operator>(PairP)constif(m>P.m)retumtrue;return11>P.n;)D.boolPair:operator>(PairP)if(m>P.m)returntrue;return11>P.n;18 .下面描述中体现了抽象类特性的语句是A.可以说明虚函数B.可以进行构造函数重载C.可以定义友元函数D.不能定义对象19 .算法的空间复杂度是指()。A.算法在执行过程中所需要的计算机存储空间B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所需要的临时工作单元数20 .下面关于C+流的叙述中,正确的是()。A.cin是一个输入流对象B.可以用ifstream定义一个输出流对象C.执行语句序列Char*y="PQMN”;COUt<<y;将输出字符串PQMN的地址D.执行语句序列CharX80;Cin.getline(x,80);时,若输入Happynewyearj则X中的字符串是“Happy”21 .下面程序的运行结果为#include<iostream,h>Voidswap(int&a,intb)inttemp;temp=a+;a=b;b=temp;voidmain()inta=2,b=3;swap(a,b);cout<<a<<,l''<<b<<endlA.2,3B.3l2C.2,2D.3,322 .有如下程序;#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.2D23 .表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是A.showbase()和eof()B.shoWpoint()和eof()C.showpoint()和bad()D.showpoint()和good()三、2.填空题(12题)24 .有下列程序:#include<iostream>usingnamespacestd;classONE(public:virtualvoidf()COUt<<',');classTWO:publicONE(public:TW0()cout<<W");classTHREErpublicTWO(pub25 .如果一个数组中的每个元素都是同一类的对象,则该数组被称为【】。26 .软件开发环境是全面支持软件开发全过程的集合。27 .一棵二叉树第八层(根结点为第一层)的结点数最多为【】个。28 .数据结构分为线性结构和非线性结构,其中循环链表属于【】。29 .软件生命周期包括8个阶段。为了使各时期的任务更明确,又可分为3个时期:软件定义期、软件开发期、软件维护期。编码和测试属于期。30 .数据库系统的主要特点为数据集成性、数据的高和低冗余性、数据独立性和数据统一管理和控制。31 .模块的独立程度可以由两个定性标准度量。其中,是度量一个模块功能强度的一个相对指标。32 .以下程序的执行结果是#include<<iostream.h>classA(public:virtualvoidfunl()cout<<nAfunl<<endl;virtualvoidfun2()cout<<Afun2<<endl;voidfun3()cout<<,Afun3,'<<endl:)voidfun4()cout<<,Afun4n<<endl:33 .数据的逻辑结构是从逻辑关系上描述数据,它与数据的【】结构无关。34 .请将下列程序补充完整,使得输出结果为bbaa。#include<iostream>usingnamespacestd;classApublic:cout<<aa;);classBrpublicApublic:-B()cout<<nbbn;);intmain()B*p=newB;deletep;return0;35 .在关系运算中,【】运算是对两个具有公共属性的关系所进行的运算。四、程序改错题(10题)36 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h>classTC(public:TC(inti)(number=i;)voidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;VoidPrintconstcout<<number=,<<number<<endl;private:intnumber;);voidmain(II*e*or*TCobjl;objl.Print;TCobj2(3);II*e*or*objl.number=10;II*ej*j*or*TC.SetNumber(100);objl.Print;obj2.Print;)37 .使用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)(/*error*if(stri)=a)stri=stri-a+A;i÷÷)cout<<str<<endl;return;38 .使用VC+6.O打开考生文件夹下的源程序文件1cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/*e*or*/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO(public:Staticintn=O:CO(n+:)CO):!*error*IintCO:n;voidmainCOobj;COobj27;CO*C=NULL:c=&obj:I*error*/eout<<C.n<<endl;cout<<CO::n<<endl;)39 .使用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;)II*error*TC:display(tout<<<,i="<<i<<n,<,<<endl;)II*error*TC:TC(COUI<<',Destructor"<<endl:)voidmain(TCa;a.display;)40 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在*error*卜试题程序:#include<iostream>#include<fstream>!1*e*or*usingstd;voidWriteFile(char*s)(Ofstreamoutl;II*e*or*outl.open(1.txt,binaryapp);for(inti=0;si!=O;i+)(Ii*ej*por*outl.puts(si);)outl.close;)VoidClearFile(Ofstreamoutl;outl.open(ul.txt);outl.close;)intmainchars1024;ClearFile;cout<<pleaseinputastrin9:,'<<endl;cin.getline(s,1024);WriteFile(s);return;)41 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h)intmain(try(throw(error");)I/*error*catch(chars)cout<<s<<endl;try(throw(int)0);)I/*error*catch(cout<<i<<endh)try(throw(O);throw("error");)II*error*catch(cout<<"ERROR,<<endl;)returnO;)42 .使用VC+6.0打开考生文件夹下的源程序文件1.cppo本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*erro*的下面。试题程序:#include<iostream.h>voidmain(inti=O;charstrl120J;cout<<Enterastringendwith?.',<<endl;!1*e*0r*cin.getline(str,120);!1*e*0r*while(str)!1*e*0r*if(stri)=a)stri=strij-a+A;1+;)cout<<str<<endl;return;43 .使用VC+6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#include<iostream.h)intmain(try(throw(error");)I/*error*catch(chars)(cout<<s<<endl;)try(throw(int)0);)I/*error*catch(cout<<i<<endh)try(throw(O);throw(error");I/*error*catch(cout<<ERROR<<endl;)returnO;)44 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/*ero*的下面,修改该语句即可。试题程序:#include<iostream.h>I/*error*voidmain(I/*error*intm=0142:I/*error*intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;45 .使用VC+6.。打开考生文件夹下的源程序文件1cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/*e*or*的下面。试题程序:#include<iostream.h>classTC(public:TC(inti)(number=i;)voidSetNumber(intm)(number=m;)intGetNumberconstreturnnumber;VoidPrintconstcout<<"number=<<number<<endh)private:intnumber;voidmain(I/*error*TCobjhobjl.Print;TCobj2(3);I/*error*objl.number=10;/*errc)r*%0*TC.SetNumber(l00);objl.Print;obj2.Print;五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeePCoPy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数Operator=,以实现深层复制。要求:“*666*''之间o不得修改程序的其他部分。注意:程序最后将结果输出到文件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 .使用VC+6.。打开源程序文件3.cpp。其中类TC用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件OUtLtXt和out2.txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。把获得的输入文件的内容存储到bur中,并且用Ien记录下文件的长度。请在注释2后添加适当的语句。将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。使用文件流对象打开输入文件in.txt,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:include<iostream.h>#include<fstream.h>include<stdlib.h)classTCpublic:TC(char*fileName)(Ien=O;fstreaminfile;infile.open(fileName,ios:in);charch;while(cout<<ch;)infile,close;)voidsplit(fstreamoutfilel;fstreamoutfile2;OUtfilel.open("outl.txt,ios:out);outfile2.open("out2.txt,ios:out);inti=O:for(i=0;i<len/2;i+)do)while(i!=len);OUtfilel.close;outfile2.close;)prwate:intlen;charbuf1024:;voidmain(/*4*TCobj;obj.split;return;)六、3.综合应用题(2题)48 .使用VC6打开考生文件夹下的工程test35.3o此工程包含一个test35.3.cpp,其中定义了时钟类Ck)Ck,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。定义类clock的私有数据成员hour和minute,它们都是int型的数据。请在注释“*1*”之后添加适当的语句。(2)补充完全类clock的构造函数,私有数据成员hour和minute分别初始化为参数h和m的值,请在注释“/*2*"之后添加适当的语句。完成类clock的成员函数printtime.的定义,该函数以“Nowthetimeishour:minute”的格式输出数据成员hour和minute的值,如hour=3xminute=59,则输出为“Nowthetimeis03:59”,请在注释“/*3*”之后添加适当的语句。完成类clock的成员函数addoneminutetime的定义该函数可将clock类对象表示的时间加一分钟,如现在hour=3、minute=59,运行该函数后hour=4、minute=0o请在注释“*4*»之后添加适当的语句。程序的输出结果如下:Now,thetimeis12:59Now,thetimeis13:00注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test35_3.cpp清单如下:#include<iostream.h>classclock(private:/*j*public:clock(inth,intm)intpresenthour()returnhour;intpresentminute()returnminute;voidaddoneminutetime();voidprinttime(););voidclock:pnnttime()(if(hour<10)cout<<,0,;H*3*if(minute<10)cout<<,0'cout<<minute<<endl;)voidclock:addoneminutetime()f(minute>59)(*4*( minute-=60;hour+;)if(hour>23)hour=0;)voidmain()(clockc(12,59);c.printtime();c.addoneminutetime();c.printtime();)49 .使用VC6打开考生文件夹下的工程MyPrOj14。此工程包含一个源程序文件MyMain14.cpp,程序中定义了3个类A、B和C,但类的定义并不完整。请按要求完成下列操作,将类的定义补充完成:类A的成员函数setx(inti,intj)是虚函数,其实现的功能是将类A的保护成员X和y分别设置成i和j并且y具有默认值O0请在注释“*1*''之后添加适当的语句。将类A的成员函数Print()声明成员纯虚函数。请在注释“*2*”之后添加适当的语句。完成类A的保护数据成员X和y的定义,它们都是整型变量。请在注释“*3*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain14.叩P清单如下:/MyMain14.cpp#include<iostream>usingnamespacestd;classA(public:*2*protected:*3*);classB:publicA(public:voidprint()(COUt<<x*x<<n,n;classC:publicA(public:voidprint()cout<<x*x*x<<endl;intmain()A*pa;Bb;Ce;pa=&b;pa->setx(5);pa->print();pa=&c;pa->setx(2);pa->print();returnO;参考答案l.c解析:本题考查友元函数的应用。程序中函数square是类sample的一个友元函数,它可以直接访问类Sam-Pie的所有成员。它的功能是返回类sample的私有数据成员X的平方。所以程序的执行结果是900o2.A解析:C+语言中预处理语句的开始符号是#。3 .A4 .A解析:本题考查的是字符数组的初始化。选项B中用3个元素初始化大小为2的数组,越界了;选项C中应该是2行3列的数组,题中使用3行2列初始化,选项D中数组合后应用方括号。5 .A6.B解析:本题考察逗号表达式的使用规则。只要考生能将表达式正确展开,逐步分析,就可获得正确答案为B。7.B解析:对数组定义为普通数组时,要求数组的下标是常表达式,若定义成数组指针则不需要指定数组的大小。8C解析:本题考核拷贝构造函数的概念。声明拷贝构造函数的格式为:类名:拷贝构造函数(const类名&引用名);,其中const是修饰符可,以省略。9.BBo【解析】虚基类的引入就是为了消除二义性,其构造函数的调用仍然是按照继承的顺序进行的,对于多个虚基类则按它们说明的次序调用,虚基类的构造函数先于非虚基类的构造函数执行。10.A【解析】此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过31个字符:标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。11.D解析:本题考核的是字符串常量这个知识点。字符串常量实际上是一个数组,组成数据的字符除显式给出的外,还包括字符结尾处标识字符串结束的符号0'。所以字符串的字符个数等于字符个数加1,C+语言编译器会自动在字符串的末尾加上0',作为字符串结束标识。故本题答案选项是:D012.B解析:当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式:形参定义成数组;形参定义成可变长数组:形参定义为指针变量。13.B数据库有三层模式结构,逻辑模式是数据的全局逻辑结构的描述,外模式也称为子模式,是局部数据的逻辑结构描述,而内模式也称为存储模式,是数据库物理存储结构和存取方法的描述。14.ACOnSt是一个c+语言的关键字,它限定一个变量不允许被改变。使用COnSt在一定程度上可以提高程序的安全性和可靠性。限定符声明变量照能被读,必须初始化。A选项没有初始化,B、C、D选项都正确。15.BBo【解析】本题考查运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且cl、c2都是该类的对象,贝卜CLoperator+(c2)”,与“cl+c2”含义相同。如果+作为该类的非成员函数重载,则"operator+(cl,c2)”与“cl+c2”含义相同。同理,运算符作为友元函数重载,则"(-X)/y”与表达式“operator/(Gx),y)”相同。前缀运算符“作为友元函数重载,则与OPeratOr(x)”相同,所以组合起来J40perator/(operator(x),y);”,即B选项。16.D17.A解析:题目要求先比较m的大小。其次比较n的大小,首先看函数定义booloperator>(Pairp)corlst,从中可以看出B)和D)选项和函数定义不一致,缺少ConS3故排除;选项C只有一层比较不符合题意,故排除C)选项。因此,本题答案为A)。18 .D解析:抽象类指的是类中至少有一个纯虚函数,纯虚函数是虚函数后有"=0''修饰,表示该函数在本级类中没有实现,类仅用于派生。抽象类存在的唯一目的就是构造类层次,派生出其他类。抽象类与其他类的最大区别就在于抽象类不能实例化。19 .A算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A项。20.AAo本题考查C+流的溉念和I/O的格式化。tin是istream类的对象,即输入流对象。ifstream是输入文件流,类不能定义个输出流对象。getline函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止,在读取完成后,从读取的内容中删除该终止字符,所以D选项中的语句序列后X中字符串应该是Happynewyearo21 .D解析:本题考查的是引用调用,因为函数swap引用调用参数a,所以在SWaP函数中a的变化会改变主函数中9的值,即a自力口1,但b的值并未改变。22.B23.B解析:表示在输出时显示小数位,和在文件输入时判断文件尾的函数分别是ShoWPOint()和eof()o22 .22132213解析:此题考查的是派生类的构造和析构函数。建立TWo的对象bb时,调用TWO的构造函数,输出“2";THREE类又派生于TWO类,所以建立THREE类的对象CC时又会输出“2”;ONE类的对象指针P指向了THREE类的ONE类的虚函数f(),输出“1”;最后调用THREE类的f(),输出“