《2022年福建省龙岩市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年福建省龙岩市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年福建省龙岩市全国计算机等级考试C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .()是以一种完全通用的方法来设计函数或类而不必预先说明将被使 用的每个对象的类型。A.模板B.类C.对象D.函数2 .下列关于E-R图的描述中正确的是()。A.E-R图只能表示实体之间的联系8 .E-R图只能表示实体和实体之间的联系C.E-R图只能表示实体和属性D.E-R图能表示实体、属性和实体之间的联系3 .通过公有派生类的对象,只能访问基类成员中的A.公有成员B.私有成员C.保护成员D.公有成员和保护成员4 .内部格式控制操作函数是在头文件()中定义的。5 .下面
2、程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是#include Void main() int i=0, j, k ; doi+ ; k=316-13*i ; while() ; j=k/ll ;*T*errorTC: display(touti=i, endl; )/不不小小个不error不不小不小个TC:TCCOUInDestructornendl :) voidmain(TCa;a. display;37 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catc
3、h必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *error*的下面。试题程序:#include不不不不不不不不nor不不不不不个不catch(chars) coutsendl;) try throw(int)0);catch coutiendl;) try throw(O);thro w( error);vl* kL* vf* vl*个个个个不不不小nor小个个个不小个个catch coutnERRORnendl ;returnO;38 .使用VC+6. 0打开考生文件夹下的源程序文件
4、1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#include voidmain inti=O;charstr120;coutnEnterastringendwith?. nendl ;*个个个个个个个个nor个个小个个个个个cin. getline(str, 120);7 77,7个个个不不个个个不不不不不不不不while(str)7,7,k! 7, 不下不不不不
5、不*r*个个个个个个个不if(stri)=a)stri=stri-a+A;i+ + ;)coutstrendl ;return ; )39 .使用VC + +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number= 10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#includeclassTC (public :TC(inti) (number=i ;)voidSetNumber(intm)(number=
6、m ;)intGctNumbcrconst(returnnumber ;voidPrintconst coutnumber= nnumberendl ; )private :intnumber ;voidmainvl* vl*vL* kL*个个个个不不个个n*or个个不不个予个不TCobjl ;objl . Print ;TCobj2(3);7 7,7,7 7,7 个个个个个个不不enr不干个个个个个不objl . number= 10 ;1 I * error* 0 * *TC . SetNumber(lOO);objl . Print ;obj2 . Print ;40 .使用VC + +
7、 6 .。打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现 的功能为从键盘输入一个字符串,并将结果保存到文件1 . txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在* eno * * * * * * 白勺 试题程序:#include#include个个个个小个个个nor个个小个个个个个usingstd ;voidWriteFile(char*s) ofstreamoutl ;k1k1 k1 kIkJ k1 kf 7,个个个个个个个个rror个个个个个个个个outl . open(nl . txt, b
8、inary|app);for(inti=0 ; si!=0 ; i + +)个个个个个个个个nor个个个个个个个个outl.puts(si);outl.close ;)voidClearFile ofstreamoutl ;outl . open(Hl . txt);outl . close ;) intmain chars 1024;ClearFile ;coutnpleaseinputastrin9 :nendl ;cin . getline(s, 1024);WriteFile(s);returnO ;)41 .使用VC + +6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行
9、时有错误,请改正程序中的错误。本程序要求实 现的功能为从键盘输入一个字符串,并将结果保存到文件1. txt中。 注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在* enror* * 3 j。试题程序:#include #include usingstd;voidWriteFile(char*s) ofstreamoutl ;vl*vt* kI*不不不不不不不不不不不不不不不不outl. open(nl. txt, binary|app);for(inti=0; si!=0; i+)kIKL*个个个个个个个个nor个个个个个个个个 outl. puts(si);
10、 ) outl. close; ) voidClearFile ( ofstreamoutl ;outl. open(Hl. txt);outl. close; ) intmain (chars 1024;ClearFile;coutnpleaseinputastrin9 : nendl;cin. getline(s, 1024);WriteFile(s);returnO; )42 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序 运行时有错。请改正程序中的错误,使程序输出的结果为100 37 32注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#
11、include* error* * * * * *voidmain* error* * * * * *intm=0142:/ / *error* intn=0X27 :intq=32;cout m endl;cout n endl ;cout q endl;return ;)43 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序 运行时有错误,请改正错误,使程序正常运行,并且要求最后一个 catch必须抛出执行的任何异常。程序异常,输出信息为error 0 ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *error*的下面
12、。试题程序:#include *1 *1 k1k| kJerror木平不不不小不catch(coutiendl;) try (throw(O);throw。error);个个个个个个个个nor个个个个个个个个catch coutnERRORnendl;cout ”316=13*” i n+ll*n classCO (public:/ 不不不不不不不不en*or不不可不不不不不/staticintn=O:CO (n+ + :)CO(n:):errork*k1 k! k k!*T* rw rTw t* rTw *T *TwintCO: n;voidmainCOobj ;COobj27;COCNUL
13、L:c= & obj :vl*k1* kL*不干不不不不不不nor不不不不不不不不eoutC . nendl ;coutC0: nendl;45 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number=10number= 100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *error*的下面。试题程序:#include classTCpublic:TC(inti) number=i;voidSetNumber(intm) number=m ;int
14、GetNumberconst returnnumber;voidPrintconst coutn number=n numberendl ;private:intnumber;voidmainvl* vl* vt*vt*1# k*不不不不不不不不不不不不不不不不TCobjl;objl. Print;TCobj2(3);7, 7,*1,7,7 7,objl. number= 10;/ * enor* * *TC. SetNumber(lOO);objl. Print;obj2. Print; )五、综合应用题(2题)46.使用VC+6. 0打开考生文件夹下的源程序文件3. cpp。类 Peopl
15、e包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓 名,然后输出这个姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完 整。完成类的构造函数功能,请在注释1后添加适当的语句。完成构造函数对姓名的赋值,请在注释2后添加适当的语句。定义类的友元函数fun,请在注释3后添加适当的语句。(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其 他的程序代码。试题程序:#includeclassPeople (public:/ kL*i7” 7,/rT*IrT*inti;for(i=0; sUserNamei
16、! =0; i+)m_UserNamei=sUserNamei;)/ vL*kL*/J rr、rrm_Old=nOld ;private:charm_U serName 3 2;intm_01d ;/*1 kJ kI k!7,*1 k1/rjwrj* rj*);voidfun(char*s,People & personl, People & person2I I *4* if fbr(inti=O; personl. m_UserNamei!=0; i+ si=personl. m_UserNamei;si+l=0;else fbr(inti=O ; person2. m_UserNamei
17、!=O; i+ +)si=person2. m_UserNamei;si+l=O; ) ) voidmain (chars32;Peoplepl(nabc% 20);Peoplep2(def, 30):fun(S, pl, p2);coutsendl:return ; )47.使用VC+6. 0打开源程序文件3. cpp。其中类TC用于把文件 输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的 大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将 in. txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件。utl. txt和out2. txt中。其中定义的类并不
18、完整,按要求完成下列操作,将类的定义补充完整。从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。(4)使用文件流对象打开输入文件in. txt,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#include#include#include kI k1 kJ kJ k!/*T* rj* *7* rrw *T*
19、I rj* rr* *T ri* r7* *Twhile(coutch;/ vt ! kJ#!vt* !v!/ rT ,7 、 , 、 ,、/、 、r7 -j、)infile, close;)voidsplit(fstreamoutfilel;fstreamoutfile2 ;outfilel.open(noutl.txt”,ios:out);outfile2.open(nout2.txt”,ios:out);inti=0:for(i=0; ilen / 2; i+)(outfilelbufi;do(/ 77, 7,7 7 7 7 7 7 7,/,rj、rj、rj、rj、q、)while(i!
20、=len);outfilel. close;outfile2. close;prwate:intlen ;charbuf1024;voidmainI I *4*TCobj ;obj. split;return;)六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test8_3,此工程包含一个源程 序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅 读已有的代码,按要求完成下列操作,将程序补充完整。定义类Table的私有数据成员x和y,分别用于表示九九表中的两个 乘数(x*y),它们都是int型的数据。请在注释“*1*”之后添加适当的 语句;完成类Table
21、的成员函数prin()的定义,该函数以x*y=z”的格式打印 出九九表中的一个乘法算式,请使用格式化输出函数prinff实现,在注 释“*2*,之后添加适当的语句;完成类Table9的成员函数print。的定义,该函数调用基类Table的print。函数,将九九表输出到屏幕,请在注释“*3*”之后添加适当的 语句;(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“*4* ”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test8_3.cpp清单如下:#include #include class Table*int z;pu
22、blic: void print(int x, int y, int z););void Table:print(int x, int y, int z) class Table9:public Table (public:void print();;void Table9:print()( int x, y, z;for (i=l;i 10;i+) for(j=l;j i+l;j+)A.软件做什么B.用户使用界面C输入的信息D.软件的规模9 .以下程序的输出结果是()。#include main() int m=5;if(m+ 5) cout m; else cout m; A.7B.6C.
23、5 D.410 .关于getline。函数的下列描述中,错误的是()。A.该函数可以用来从键盘上读取字符串B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符时便停止D.该函数中所使用的终止符只能是换行符二、单选题(13题)H.关于类模板,下列表述不正确的是A.用类模板定义一个对象时,不能省略实参B.类模板只能有虚拟类型参数C.类模板本身在编译中不会生成任何代码D.类模板的成员函数都是模板函数12 .运算符重载时不需要保持的性质是。A.操作数个数B.操作数类型C.优先级D.结合性13 .在软件开发中,需求分析阶段产生的主要文档是()ox=i;y=j;z=i*j;Table:p
24、rint(y, x, z);)printf(nnu);) main() (+*4*return 0; )49.使用VC6打开考生文件夹下的工程MyProjlO。此工程包含一个源程 序文件MyMainl0.cppo程序中定义了两个类Base和Derived,但类的 定义并不完整。请按要求完成下列操作,将类的定义补充完成:类Derived是基类Base公有派生来的。请在注释“/* *1* *”之后添加 适当的语句。完成构造函数Derived(inti)定义 采用初始化列表的方式使基类Base 私有成员a初始化为i+1,类Derived的私有成员b初始化为i0请在注 释“* *2* *”之后添加适当
25、的语句。完成类Derived的成员函数show。的类体外的定义。函数show。中要 显式调用基类的show。函数,然后要输出私有成员b的值。请在注释“/* *3* 之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMainlO.cpp清单如下:/MyMainlO.cpp#include using namespace std ;class Base (public :Base(int x) ( a=x void show() (cout show();return 0 ;)参考答案LA解析:此题考查的是模板的特点。模板是以一种完全通用的方法来 设计函
26、数或类而不必预先说明将被使用的每个对象的类型。2 .D解析:E-R(实体一联系,Entity-Relationship)图是设计概念模型的有 力工具。在E-R图中,用三种图框分别表示实体,属性和实体之间的联 系:用矩形框表示实体,框内标明实体名;用椭圆状框表示实体的属性,框内标明属性名;用菱形框表示实体问的联系,框内标明联系名;实体与其属性之间以无向边连接,菱形框与相关实体之间也用无向边 连接,并在无向边旁标明联系的类型。因此,用E-R图不仅可以简单明了地描述实体及其相互之间的联系,还 可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的 联系。由此可知,选项A、B、C二个选项中的既法
27、都是不对的。3 .A解析:本题考核派生类的访问权限。派生类的继承方式有三种:公 有继承public、私有继承private和保护继承protected。当公有派生时, 派生类成员函数只能访问基类的公有成员和保护成员,但是通过派生类 的对象只能访问基类的公有成员。4.B5.B解析:dowhile语句的一般形式是 do ( 语句 while(表达式);特点是:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达 式”为非0,再执行“语句,直至表达式的值为。时停止执行语句。在 一般情况下,用while和dowhile语句解决同一问题时,若二者的循 环体部分是一样的,它们的结果也一样。但当w
28、hile后面的“表达式”一 开始就为“假”时,两种循环的结果不同。这是因为此时while循环的循 环不被执行,而dowhile循环的循环体被执行一次。本题的关键是两 个加数分别能被13和11整除,在i=0时.直接将316赋值给k,当 k%ll的值为。时,则不必执行循环,将执行j=k/U语句,输出结果, 所以该表达式合理的条件是k%llo6.A解析:为a申请一个比aa串长增加1的一个存储空问。B和C缺少 new运算子,D分配空间不足。7.B rn 本题考查宏定义的功能,可以把它看成一个函数,直接代人参数,可 计算出结果为34,故选B。8.A解析:需求分析是软件定义时期的最后一个阶段,它的基本任务
29、就 是准确回答“系统必须做什么”这个问题即软件系统功能,需求分析的任 务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些 工作,也就是对目标系统提出完整、准确、清晰、具体的要求。9.B10.DH.B解析:本题考核类模板的概念。类模板就是一系列相关类的模型或 样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的 只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。 C+中可以委类模板的参数设置默认值,所以B)选项是不正确的,其 他选项的表述都是正确的。12.Bn重载运算符的规则如下:C+不允许用户自己定义新的运算符, 只能对已有的C+运算符进行重裁C+不能重载的
30、运算符只有5个; 重载不能改变运算符运算对象的个数;重载不能改变运算符的优先 级和结合性;重载运算符的函数不能有默认的参数;重载的运算符 必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象, 即不允许参数全部是C+的标准类型。所以答案为B。n13 .D需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求 规格说明书、需求评审四个方面。所以选择D。14 .D解析:二维数组可以看作是一维数组的扩展。选项D表示的是一 个一维数不清组,里面每个元素是一个指针,而指针肯定指向某个地址, 从而完成二维数组的扩展。考生要注意选项C中*和口的运算优先级。15.BBo【解析】本题考查关于C+语
31、言继承问题中派生类对基类的访问。C+语言中通常有三种继承修饰符,即public、protected private,限制依次严格,另外对类中的数据和函数也由这三种修饰符 进行限制,有三种成员是不能继承的:公有继承基类的私有成员,私 有继承基类的私有成员,保护继承基类的私有成员。16.CCo【解析】本题主要考查类对象的定义,类的对象一般放在类结构体 外或在主函数中定义,而不能放在类定义的结构体中,但自身类的指 针可以,本题BBv3不能被定义于类体内。17 .A栈支持子程序调用。栈是-种只能在-端进行插入或删除的线性表, 在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子 程序,最终把
32、子程序的执行结果返回到主程序中调用子程序的位置,继 续向下执行,这种调用符合栈的特点,因此本题的答案为A。18 .C解析:C+ +语言中拷贝构造函数的参数一般是某个对象的引用名。 19.CCo【解析】在scanf输入函数中,格式字符s的作用是输入一个字符 串,直到遇到空格结束。所以选项C不能输入包含空格的字符串。正 确答案为选项Co20.B解析:C+语宫中当一个新对象被另一个已存在的同类型对象初 始化时要调用复制构造函数,语句MyS-trmgb(a), ”符合此条件将调用 类MyString的复制构造函数,但是类MyString没有定义此复制构造函 数,所以会出错。21.A解析:C语言的基本单
33、位是函数;函数可以调用可以嵌套,但函数 定义不可以嵌套;函数可以没有返回值,在函数名前加void ; C+程序 中调用关系的所有函数可以放在不同的程序文件中,故正确答案为A项。22.B解析:C+语言中全局变量是任何函数都可以改变的量,静态变量 的有效范围在定义它的类中,而普通的变量的有效性只在使用它的函数 中,在本题中c为全局变量,b为静态变量,a为普通变量,b和c在类 A的对象al和a2中都自加1。所以b, c为2,a为1。23.B解析:本题考查的是函数的调用,第一次调用min(2, 3),因为2V 3,所以返回值为2,第二次调用min(l, 2),因为1=a&striv=2)【解析】本题中
34、要求以输入字符“?”为结束符,用于字符输入的流成员 函数getline函数读入一行字符,格式为“cin. getline(字符数组,字符 个数,终止标志字符广,所以第1处改为“cin. getline(str,120, ?); 第2处的“while(str)”语句应该是判断字符串str中的每一 个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否 为小写,若为小写,则转换。所以应该修改为“while(stri)”。第3处的“if(st巾=a)”语句是判断字符stri是否为小写字符,而现有的语句只 是判断字符是否大于a,但是小写字符应该是a到2,所以修改为 uif(stri=a& &st
35、ri=z),o39 .(1)应改为TCobjl(l); ”。n(2)应改为 “Objl . SetNumber(lO);n(3)应改为“0bj2 . SelNumber(lOO);n【解析】本题第1处的“TCobjl ; ”语句是声明TC类的对象Objl,根据 TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输 出结果两1,所以补全参数1,即第1处的“TCobjKD ; 第2处处的 “objl . number= 10 ;”应该是调用成员函数SetNumber赋值。在C + +中 成员函数的使用形式应该是:对象名.成员函数,所以修改为 “objl . SetNumber(lO); 类是对象的抽象,而对象是类的具体实例。 第3处“TC . SetNumber(lOO); ”语句中的TC为类,并不是对象,这里 应该使用定义的对象,即obj2 ,所以将语句修改为 uobj2 . SetNumber(lOO); 。40 .(1)应改为usingnamespacestd ;n(2)应改为outl . open(l . txt, ios : binary | ios : app); 。n(3)应改为“outl . put(si);n【解析】本题第1处的“usingstd厂是在程序中引入标准命名空间std, 对于C + +中引入标准命名空间