《2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年山东省济南市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年山东省济南市全国计算机等级考试C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列叙述中正确的是()oA.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对2 .若有有x=l, 2, 3, 4, 5, 6, 7, 8, 9, 10), *p=x ;则值为 4 的表达式是 OA.p+=2, *(p+) B.p+=2, *+pC.p+=3, *p+D.p+=2, +*p3 .下列关于输入流类成员函数getline。的描述中,错误的是A.该函数是用来读取键盘输入的字符串的B.该函数读
2、取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格4 .以下程序段的输出结果是()。int x=5;do cout x- )Tpop()if(top=0)exit;栈空时终止运行return;);35.有以下程序:#include using namespace std; class Base ( public: Base() ( x=0;) int x;);class Derivedl: virtual public Basepublic:Derived 1() ( x=10;) );class Derived2: : virtual pub
3、lic Basepublic:Derived2() ( x=20; ) );class Derived: public Derivedl,protected Derived2 ; int main()Derived obj;cout obj.x endl;return 0;该程序运行后的输出结果是【】。四、程序改错题(10题)36 .使用VC+ +6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/
4、的下面。试题程序:#includeclassTC (public :TC(inti) (number=i ;voidSetNumber(intm)(number=m ;intGetNumberconst returnnumber ; )voidPrintconst coutnnumber=nnumberendl ;private :intnumber ;voidmainTCobjl ;objl . Print ;TCobj2(3);I I *eobjl . number=10 ;TC . SetNumber(lOO);objl . Print ;obj2 . Print ;37 .使用VC+6
5、. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *eiror*的下面,修改该语句即可。试题程序:#include(iostream. h) classTC inti;public:TC;voiddisplay;TC;*#不下不不不不en*or不可不不不不TC: TC coutnConstructornn, i=0;TC: display toutni=ni% nendl;TC: TCCOUInDestructornendl :)voidmain (TC
6、a;a. display; )38 .使用VC+ +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain () chartsl=abc:/不下不不不不不不error不不不不不
7、-不不assert(sizeof(s 1 )=3):coutnsizeof(sl)=5nendl ;chars210=nabn:/ 7 7 7 7 7 7 7 77 7 7 7 7 7 7,/不不不不不不不不error不不小不不不不不assert(sizeof(s2)=2);cout,fsizeof(s2)=10nendl ; chars3=23 :/不不不不不不不不eiroi不不不不不不不不assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ; )39 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp。本程序 要求输入一个字符串
8、,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#includevoidmain inti=O;charstr120;coutnEnterastringendwith?. nendl;1*vt*个个个个个不小个nor个个个个个个个个cm.getline(str, 120);KLKE个个个个个个个个rror个个个个个个个个while(str)、! k! 7,7,7,7,7,k17, 7,个个个个个个不个
9、rror个个个个个个个个stri=stri-a+A;coutstrendl ;return;40 .使用VC+ + 6 .0打开考生文件夹下的源程序文件1 .cpp0本程序要 求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输 入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕 中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#includevoidmain(inti=O ;charstr120;coutnEnterastringendwith? . nendl ;*i* *1 kJ 1
10、* kJ* kJk! k! k!kk! k*t*7* *r* *r*?*7*cin . getline(str, 120);kL* 1*vl*个个个个个个个不不不不不不不不不while(str)不下不不不不不不enor不不不不不不不不stri=stri-a + A ;1+ + ;coutstrendl ;return ; )41 ,使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number=10number= 100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ /
11、 *errc)r*的下面。试题程序:#includeclassTC (public:TC(inti) ( number=i;) voidSetNumber(intm) (number=m ;) intGetNumberconst (returnnumber; voidPrintconst (coutn number=n numberendl ;) private:intnumber;;voidmain(/不不不不不不不不error不不不不不不不不TCobjl;objl. Print;TCobj2(3);/vL vL*k1* kL* L* vl* k1*/不不不不不不不不error下不不不不不不
12、不objl. number=10;/ I*eiror*oo*TC. SetNumber(lOO);objl. Print;obj2. Print; 42 .使用VC+ +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0, Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include(iostream . h) classTC ( inti ;public :TC ;voiddisplay ;TC ;endl;while(!x);A.5 B.无任何
13、输出C.4 D.陷入死循环5 .类A是类B的友元,类B是类C的友元,则下列说法正确的是()。A.类B是类A的友元B.类C是类A的友元C.类A是类C的友元D. 以上都不对6 .语句 ofstream f(SALARY.DAT, ios:app | los:binary);的功能是建立 流对象f,试图打开文件SALARY.DAT并与之连接,并且 。A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个 新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个 新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件7
14、 .用树形结构来表示实体之间联系的模型称为A.关系模型B.层次模型C.网状模型D.格式化模型8 .在表达式x+y*z中,是作为成员函数重载的运算符,“*”是作为非 成员函数重载的运算符。下列叙述中正确的是()。A.operator+有两个参数,operator*有两个参数B.operator+有两个参数,operator*有一个参数C.operator+有参数,operator*有两个参数不不不不不不error不不不不不不TC : TC coutnConstructor!n, i=0;vl*不不不不不不eno不不个个不不TC : display tout classTCkJ# 7, 个干个个个
15、不不不个个个小个小个个TC(inti) m i=i ;) voidprint public :intm i ;intmain7, 7, 7,k! 7,7,个干个个个个个个nor不个个个个个个inti ;TC04(10);while(i5)! * *enr* * * / i+ + :04 . print ;coutendl ;returnO ;44 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error0 ERROR注意:不要改动main函数,不能增加或删除行,
16、也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#include kJ vl* k *1个个个个个个个个nor个个个*个个个个catch(coutiendl ;) try (throw(O);throw(nerrorn);/ 7 7 7 7 7 7 77 7 7 7 7 7” 7”/不不不小个不不不error不小不个不小不不catch(coutnERRORnendl;)returnO ;)45 .使用VC+ +6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现 的功能为从键盘输入一个字符串,并将结果保存到文
17、件1 . txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在*1 *1 *1 *1 *1 乙、q-的下面。试题程序:#include#includevl* vl* *1*个个个个个个个个nor个个个个个个个个usingstd ;voidWriteFile(char*s) (ofstreamoutl ;*1 k1*!enor不不不不不不不不 outl . open(nl . txt, binary|app);for(inti=0 ; si!=0 ; i + +)vl kL *1* k! *1 sierror outl . puts(si);)outl .
18、 close ;)voidClearFile (ofstreamoutl ;outl . open(nl . txt);outl . close ;) intmain(chars 1024;ClearFile ;coutnpleaseinputastrin9 :nendl ;cin . getline(s, 1024);WriteFile(s);returnO ;五、综合应用题(2题)46.使用VC+6. 0打开源程序文件3. cpp。其中类TC用于把文件 输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的 大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将 in. txt文
19、件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件。utl. txt和。ut2. txt 中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完 整。从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。(4)使用文件流对象打开输入文件in. txt,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修 改其他的程序代码。试题程序
20、:#include #include #include vl* si*/J 、rr)infile, close;)voidsplit(fstreamoutfilel ;fstreamoutfile2;outfilel. open(noutl. txt, ios: out);outfile2. open(nout2. txt”,ios: out);inti=0:for(i=0; i kJ/ q.*7*while(i!=len);outfilel. close;outfile2. close; )prwate:intlen ;charbuf1024;);voidmain! 1 * * *TCobj
21、 ;obj. split;return ;47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件 proj3,此工程中包含一个源程序文件proj3. cpp,补充编制C+程序 proj3. cpp,其功能是读取文本文件in. dat中的全部内容,将文本存 放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并 输出到文件out. dat中。文件in. dat的长度不大于1000字节。要求:补充编制的内容写在“*与“/*“两行之间。实现 将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得 修改程序的其他部分。注意:程序最后已将结果输出到文件Out. d
22、at中,输出函数 writeToFile已经给出并且调用。/proj3. cpp#include#include#includeusing namespace std;class doc (private:char*sir;文本字符串首地址int length;/文本字符个数public:构造函数,读取文件内容,用于初始化新对象,filename是文件名字 符串首地址doc(char*filename);void reverse;将字符序列反转一 doc;void writeToFile(char* filename););doc : doc(char) filename) (ifstream
23、 myFile(filename);int len=1001, tmp;atr=new charlen;length=0;while(trap=myFile . get)! =EOF)(strl ength+=trap ; )str length=0;myFile. close; )void doc: reverse将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换/ / / /-J、J、4doc:doeD.operator+有一个参数,operator*有一个参数9 .下列关于虚函数调用的描述, 是正确的。A.一定使用动态联编B.一定使用静态联
24、编C.必须使用动态联编D.不一定使用动态联编10 .下列叙述中,不属于测试的特征的是()oA.测试的挑剔性B.完全测试的不可能性C.测试的可靠性D.测试的经 济性二、单选题(13题)11 .有下列程序:#includevoidmain ()inta=S, b=l, t;t=(a2)|b; printf(%d n, t); )程序运行后的输出结果是()o A.21 B.ll C.6 D.l12 .下面类的定义,有()处错误。classMyClasspublic:voidMyClass ();MyClass(intvahle);deletestr;)void doc: writeToFile(ch
25、ar*filename)Ofstream outFile(filename);outFilestr;outFile. close;)void main(doc myDoc(in . dat);myDoc. reveme;my Doc. writeT oFilef,out. dat); )六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test36_3o此工程包含一个 test36_3.cpp,其中定义了类CRectangle,但该类的定义并不完整。请按 要求完成下列操作,将程序补充完整。(1)定义类CRectangle的数据成员width和height,它们都是int型的数 据
26、。请在注释“*1*”之后添加适当的语句。(2)添加类CRectangle的友元函数duplicate。的声明,其返回值类型和参 数类型均为Crectangle的,请在注释“*2*”之后添加适当的语句。完成类Crectangle的成员函数set_values的定义,把传入的参数a和 b分别赋值为数据成员width和height,请在注释“*3*之后添加适 当的语句。(4)完成派生类Crectangle的友元函数duplicate的定义,把函数中的临时 对象rectres的值返回主函数,请在注释“* 4*”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文
27、件test36_3.cpp清单如下:#include class CRectangle (/ * *public:void set_values (int, int);int area (void) return (width * height);/ * 2 *);void CRectangle:set_values (int a, int b) ( * 3 *)CRectangle duplicate (CRectangle rectparam)(CRectangle rectres;rectres.width = r ec tp ar am. w i dth 2;rectres.heigh
28、t = rectparam.height2; * 4 *)void main ()(CRectangle rect, rectb;rect.set_values (2,3);rectb - duplicate (rect);cout rectb.area() endl;49,使用VC6打开考生文件夹下的工程testl6_3,此工程定义类Cat的保护数据成员itsAge用于表示年龄,它是int型的数 据。请在注释“*1*”之后添加适当的语句。(2)定义类Cat的保护数据成员GetAge()的类外定义,返回成员的itsAge 值,请在注释“*2*”之后添加适当的语句。完成成员函数SetAge(in
29、tage)的类外定义,把数据成员itsAge赋值为 参数age的值,请在注释“*3*”之后添加适当的语句。(4)完成成员函数Meow的类外定义,使其输出字节符串“meow.”到屏幕 上。请在注释“*4*”后添加适当的语句。输出结果如下:meow .kitty is a cat who is 5 years old .meow .注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件testH3 . cpp清单如下: #include class Cat public:int GetAge();void SetAge(int age);void Meow();protected:
30、*);int Cat:GetAge() void Cat:SetAge(int age)void Cat: :Meow() ()void main ()(Cat kitty;kitty.Meow();kitty. SetAge(5);cout kitty is a cat who iscout kitty.GetAge();cout b)*(p- b)解析:注意运算符的优先级问题,可用括号括起来 以明确含义。28 .私有私有解析:派生类成员在私有继承方式下不能访问基类的所有 成员,在保护继承方式下不能访问基类的私有成员,在公有继承方式下 不能访问基类的私有成员。29 .ai+lai+l解析:实
31、现由后面一个数组元素将前一个数组元素进行 覆盖,故应该为ai=ai+lo30 .基类基类31 .地址传递地址传递32.00解析:冒泡排序算法在最好的情况下(已经有序的)元素交换次数 为0。33 .黑箱黑箱34 . stack -topstacktop-=l或 stacktop=top-1 stack topstack top-=1或stacktop=top-l解析:此题考查的是堆栈数据结构。分析题目, 首先利用函数void push(const T &i)将i压入栈,然后Tpop()将元素弹出, 但由于在压入栈时,top值已经增加1 ;要弹出元素,须使top先减1, 才能把栈顶元素弹出。故正确
32、答案为stack-topo35.2020解析:本题考核虚基类。本题中,虽然Derivedl和Derived2都 是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对 应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derivedl 中修改,还是在类Derived2中修改,都是直接对这惟一拷贝进行操作。 本题程序执行语句“Derived obj ; ”时,就会先调用虚基类Base的构造 函数,使得x=0,然后执行类Derivedl的构造函数使得x=10,再执行 类Derived2的构造函数,使得x=20。最后输出x的值为20o36 .(1)应改为TCobjl(l) ; n(2)应改为 “Objl . SetNumber(lO);n(3)应改为“0bj2 . SelNumber(lOO);n【解析】本题第1处的“TCobjl ; ”语句是声明TC类的对象Objl,根据 TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输 出结果两1,所以补全参数1,即第1处的“TCobjl(l); 第2处处的 “objl . number=10