《2022年广东省揭阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年广东省揭阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年广东省揭阳市全国计算机等级考试C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、1.选择题(10题)i.有以下程序main() int i=0,s=0;doif (i%2) i+;continue;i+;s+=i;while(i 7);cout s endl;)执行后输出结果是A.16B.12C.28 D.212 .下列 do.while 循环的循环次数为()int i=5 ; do cout 1- endl : 1 ; while (i):A.0B.1 C.5 D.无限3 .如果进栈序列为el、e2、e3、e4,则可能的出栈序列是()。A.e3、el、e4、e2 B.e
2、2s e4、e3、el C.e3s e4s el、e2 D.任意顺序4 .有以下程序 #include using namespace std ; static int days口二31,28,31,30,31,30,31, 31, 30,31, 30,31 ; class date private : int month, day, year ; public : date(intm, intd, inty) month=m ; day=d ;于【】。28 . C+编译时的多态性体现在,运行时的多态性体现在o29 .在C+ +语言中,访问一个对象的成员所用的运算符是 ,访问一个指针所指向的对
3、象的成员所用的运算符是O30 .若a是值为3的整型变量,则在计算表达式a=3*4, a*5后,a的值 为【】。31 .注释一般分为序言性注释和 注释。32 .在多继承中基类和派生类中同时出现存在二义性。33 .任何非空树中有且仅有一个结点没有前驱结点,该结点就是树的【】。34 .【】结构,也称为重复结构,即算法中有一组操作要求反复被执行。35 .下列程序的输出结果是。#include using namespace std;template T total(T* data)Ts=O;while(*data)(s+=*data+;)return s;int main()(int x =2,4,6
4、,8,0,12,14,16,18;cout total(x) classCO (public:sX个个个个个个个个个个个个个个staticintn=O:CO(n+ + :)CO(n:):intCO: n;voidmainerror1* rrCOobj ;COobj27;CO*C=NULL:c二 & obj :kl#%# #%# #个个个个个个个个个个个个个个个个eoutC . nendl ;coutC0:nendl;37.使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息
5、为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#include 7 7 7,/不不不小不不不不error不不小不不不不不catch(coutnERRORnendl ;)returnO ;38 .使用VC+ +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include(iostream . h)cla
6、ssTC (inti ;public :TC ;voiddisplay ;TC ;k! *1不不不小不不eno不不不小不不TC : TC coutnConstructornn, i=0;、! *1 kJ k1*vl kJ k! kI *1 kJ不不小小不不error不不不不小不TC : display toutni=nin, nendl ;kL*kL vt*不不不不不不enor不不不不不不TC :TCCOUInDestructornendl :)voidmain(TCa ;a display ; )39 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误
7、,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error O ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#include *1 vl rT rTerrorTC: display tout .! 7, 7,7,k* kI k! 7, 7,不不小小个不en*or不不不小不个TC:TCCOUInDestructornendl :)voidmain(TCa;a. display;41 .使用VC + +6 .0打开考生文件夹下的源程序文件1.cpp。本程序要 求输入一个字
8、符串,然后将其中的小写字母改成大写字母,字符可能输 入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕 中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/k1 kI k1 k| error不不不不不不的下面。试题程序:#includevoidmaininti=0 ;charstr120;coutnEnterastringendwith? . nendl ;vl*vL*error cin . getline(str, 120);个个个个个个不不nor个个个个个个个个while(str)kI k! k!k! k!k! k! 1k| kJ k!不不
9、不不不个不不nor个个个个个个个个if(stri)=a) stri=stri-a + A ;i+ + ;)coutstrendl ;return ; )42 .使用VC+6. 0打开考生文件夹下的源程序文件year=y ; date() void disp() cout year month day daysdt.month - 1) day-=daysdt.month-1 ;if(+dt.month= 13) dt.month=l ; dt.year+ ; dt.day=day ; retrn dt ; ; intmain() dated 1(6, 20, 2004), d2 ; d2=dl
10、+20 ; d2.disp(); return 0 ; 执行后的输出结果是A.2004-7-10 B.2004-6-20 C.2004-7-20 D.程序编译时出错5 .数据处理的最小单位是()。A.数据B.数据元素C.数据项D.数据结构6 .下列关于i的输出值,正确的是()。A.#include using namespace std; void main() for(int i=0;i =3;i+) i+; cout i; 则输出值为 5OB.A程序的输出值为6C.#include using namespace std; void main() for(int i=0;i =3;i+)
11、i+; cout ,+, * , D. ,+ *8 .进行文件操作时需要包含()文件。1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实 现的功能为从键盘输入一个字符串,并将结果保存到文件1. txt中。 注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#include#include/ / *eiror*usingstd;voidWriteFile(char*s) (ofstreamout 1 ;/ / *error*utl. open(nl. txtn, binary|app);for(inti=0
12、; si!=0; i+) (/ / *eiror*outl. puts(si);)outl. close;)voidClearFile(ofstreamout 1 ;outl. open(Hl. txt);outl. close;) intmain chars 1024;ClearFile;coutnpleaseinputastrin9 :nendl;cin. getline(s, 1024);WriteFile(s);returnO ;43 .使用VC+ +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:9, 8, 7, 6, 5注意:
13、错误的语句在/ *error* /的下面,修改该语句即可。其他的语句不能修改。试题程序:#include(iostream . h classTCkL*kL* vl* *1不个不个个个不个个不个个个不不小TC(inti) m i=i ;) voidprintcoutm_i,;public :intm i ;intmainkL* kL*vL* kL*vL不干不不个不不不nc)r小不不不不不不inti ;TC04(10);while(i5)I *eifOr* / 1+ + :04 . print ;) coutendl ;returnO ;44 .使用VC+6. 0打开考生文件夹下的源程序文件1.
14、cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:numbcr= 1number= 10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#includeclassTC (public:TC(inti) (number二 i;)voidSetNumber(intm)(number 二 m ;)intGetNumberconst(returnnumber;) voidPrintconst(coutnnumber=nnumberendl;)private:intnumber;;vo
15、idmain(/不不不不不不不不error不不不不不不不不TCobjl;objl. Print;TCobj2(3);si#*T rr *T rr Terrorobjl. number= 10;/ / * ej*p0* *TC. SetNumber(lOO);objl. Print;obj2. Print; )45 .使用VC+ +6.0打开考生文件夹下的源程序文件1.cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5 sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,
16、错误的语句在/k1 k1*1 7,kIerror不不小不小不的下面。不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include #include voidmain ()chartsl=nabcn:kIk k kJ k! kt k!不不不不不不不不error不不不不不不不不assert(sizeof(s 1 )=3):coutnsizeof(sl)=5nendl ;chars210=nabn:!* !*k!* kT*vt*个小小个个不小不下个不不不不不不assert(sizeof(s2)=2);coutnsizeof(s2
17、)=10nendl ;chars3=23 :7,7,7,7,kJ7,7,7,、!7,7,7,个个个个个个个不不不不不不不个个assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ;五、综合应用题(2题)46 .“while应改为while(infHe . get(ch),o(2)应添加burlen + + =ch ; burlen=ch ; len + + ;”。(3)应添力routfne2vvburi + + ; ,uoutfile2bufi ; i + + ; ”。(4)uTCobj ; ”应改为“TCobi(”in . txt):【解析】
18、本题考查了文件流的使用。根据题意,第1处要获得一个字符,并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf 数组,同时让len增1 ;第3处将buf中的字节输出给outfile2,注意同 时让i增1,否则while循环将进入死循环;第4处TC只确一个带char* 参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参 数应该是“”in .txt”。47 .请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程prog3,其中声明了 ValArray类,该类在内部维护一个动态分配的整型 数组。ValArray类的复制构造函数应实现对象的深层复制。请编写 ValArr
19、ay类的复制构造函数。在main函数中给出了一组测试数据,此 种情况下程序的输出应该是:ValArray vl= 1, 2, 3, 4, 5) ValArray v2=l, 2, 3, 4, 5要求:补充编制 的 内 容写在“* *333 *与*666*“之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out. dat中。输出函数write To File 已经编译为boj文件,并且在本程序中调用。/ValArray. h#include using namespace std; class ValArray int *v : int size ; public :ValArray
20、(const int * P, int n): size(n) v=new intsize;for(int i=0; isize; i+) vi=Pi;六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程testl9_3,此工程包含一个源程 序文件testl9_3.cpp,其中定义了用于表示向量的类vector,但类vector 的定义并不完整。请按要求完成下列操作,将类vector的定义补充完整。 补充类vector的构造函数,该函数有参数x和y,它们都是血型的 数据,默认值都为0。请使用参数列表的形式分别将类的数据成员a和 b分别初始化为参数x和y的值。请在注释“*1*”之后添
21、加适当的语 句。(2)完成类vector的成员函数input(int x,int y)的定义,将int型的参数x 和y分别赋值给数据成员a和b,请在注释“*2*”之后添加适当的语 句。(3)完成类 vector 的友元函数 friend double Multiply (vector &x,vector &y) 的定义,先定义double型的临时变量c,然后将参数对象x和对象y的 数据成员a与b分别相乘再相加后赋值给最后返回c的值,将请在 注释“*3*,之后添加适当的语句。输出结果如下: (10. 20) (2, 3)80注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件t
22、estl9_3.cpp清单如下:#include class vector int a;int b;public:*void input(int x, int y)*2*)void output ()cout V a b n)n endl;)friend double Multiply(vector &x,vector &y);double Multiply (vector &x,vector &y) c=x.a*y.a+x.b*y.b; return c;void main() vector x(10,20),y;double d;y.input (2,3); d=Multiply (x,y
23、);x. output ();y. output ();cout d endl;49.使用VC6打开考生文件夹下的工程MyProj8o此工程包含一个源程 序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个 类:一个是节点类node,它包含节点值和指向上一个节点的指针prey ; 另一个类是栈类stack,它包含栈的头指针top。但类的定义并不完整。 请按要求完成下列操作,将类Sample的定义补充完成:定义私有节点值data,它是血型的数据,以及定义一个指向上一个节 点的指针prev。请在注释“/* *1* *”之后添加适当的语句。完成构造函数node(intd,node
24、*n)的定义,使得私有成员data和prev分 别初始化为d和no请在注释“/* *2* *之后添加适当的语句。完成类stack的成员函数push(int i)的类体内的定义。函数push。实现 入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点, 并让这个节点的prev指针指向栈顶。请在注释“* *3 * *之后添加适当 的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain8.cpp清单如下:/MyMain 8.cpp#include using namespace std;class stack;class node(private:*pu
25、blic:node(int d, node *n)(* * 2 * *)friend class stack;);class stack node *top; 栈头9 .关于二义性的描述错误的是A.一个子类的两个父类中都有某个同名成员,在子类中对该成员访问可 能出现二义性B.解决二义性可以用对成员名的限定法C.父类和子类中同时出现同名函数,也可能存在二义性D.一个子类是从两个父类派生出来的,而这两个父类又有一个共同的父 类,对该父类成员进行访问时,可能出现二义性10 .按照标识符的要求,下列选项中,()符号不能组成标识符。A.连接符B.下划线C.大小写字母D.数字字符二、单选题(13题)11
26、.有如下程序:#includeusingnamespacestd ;intmain ()(int*P;*P=9:coutThevalueatP: prev ;int c=t- data ;delete t ;return c ;return 0 ;);int main()(stack s ;s.push(6);s.push(3);s.push(l);return 0 ;)参考答案1 .A解析:本题考察continue语句在while循环中的使用:直接跳转到 条件判断表达式位置,不再执行continue后面的语句。另外,根据分析 可知,本题循环体的功能是将0, 2, 4, 6位元素加一后累加,故
27、结果应 是1+3+5+7,因此正确答案为A。2 .D3.B解析:由栈“后进先出”的特点可知:A中el不可能比e2先出,C中 e3不可能比e4先出,且el不可能比e2先出,D中栈是先进后出的, 所以不可能是任意顺序。所以B是正确的。它执行的顺序是:el进栈 e2进栈e2出栈re3进栈e4进栈一e4出栈e3出栈fel出栈, 所以只看出栈序列应为e2, e4, e3, elo4 .A解析:本题考核运算符的重载。本题通过将“+”运算符重载为类date 的成员函数实现简单的对象加法,5 .C解析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而 数据是指能够被计算机识别、存储和加工处理的信息载体
28、;数据结构是 指数据之间的相互关系和数据运算。故正确答案为选项C)。6 .C解析:选项A的程序输出4,i等于4不满足循环条件,退出循环; 选项C的程序共执行了两次循环体,第1次输出i等于1,第2次循环 输出i等于3,所以选项C输出值为13。7 .D解析:运算符重载为成员函数的形式为:函数类型operator运算符 (形参表)函数体;;运算符重载为友元函数的形式为:friend函数类型 operator运算符(形参表)函数体;)。一般来讲,单目运算符最好重载为成 员函数,双目运算符最好重载为友元函数。=、口、()、-以及所有的类 型转换运算符只能作为成员函数重载。8.B9.C解析:基类和其继承类
29、同时出现同名函数,则在继承类中实现对象 中调用该函数是使用继承类中的定义,这种情况下是不会产生二义性的。 10.A【解析】此题考查的是标识符。标识符是由数字、字母以及下划线 构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的 长度是任意的,但由于编译系统的限制一般不超过31个字符:标识符 中的大小写字母是不同的;定义标识符时不能采用系统的保留字。11 .DDo【解析】本题考查指针的使用。在给*P赋值前,指针P并没有指 向一个具体的对象。此时可以通过编译,但运行时由于P中为随机 值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序 出错。12 .CCo【解析】本题考查位操作,
30、将4转化成二进制为0100,左移一位 后为1000,转成十进制为8,所以输出8。13 .AA)【解析】关系的并运算是指由结构相同的两个关系合并,形成一个 新的关系,新关系中包含两个关系中的所有元组。14.BB。【解析】耦合是指模块间相互连接的紧密程度,内聚性是指在一 个模块内部各个元素彼此之间接合的紧密程序。高内聚、低耦合有利于模块的独立性。15 .C在进入最后一次循环时a=10,在循环体内执行“a+;”后a=ll,执行 完该次循环体计算for循环的增量部分后a=12小于10,循环结束。16 .D解析:函数的形参和实参具有以下特点:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放
31、所分的内存单元。因此,形参只有在函数内部有效。函数调用结束返回 主调函数后则不能再使用该形参变量。实参可以是常量、变量、表达 式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必 须具有确定的值,以便把这些值传送给形参。因此应通过预先用赋值, 输入等办法使实参获得确定值。实参和形参在数量上,类型上,顺序 上应严格一致,否则会发生“类型不匹配”的错误。函数调用中发生的 数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值 反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实 参中的值不会变化。注意:函数调用不可以作为一个函数的形参。注意: 函数可以嵌套调用,但是不可
32、嵌套定义。17 .A详细设计的任务是为软件结构图中而非总体结构图中的每一个模 块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数 据结构的细节,所以A错误。18 .DDo【解析】函数执行过程为:functionl(5), function2(3), functionl(2),function2(0)return。19 .AAo【解析】本题考查C+ +中cin输入流对象的使用规则,其特点是 以空格、回车和tab为分隔符。因此this和is之间的空格告诉cin对象 停止接收后面的数据。故正确答案为A。20 .CC【解析】一般来说,在线性表的链式存储结构中,各数据结点的 存储序号是不连续
33、的,并且各结点在存储空间中的位置关系与逻辑关系 也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只 需改变结点的指针域即可。21 .C22 .D解析:在需求分析阶段中,根据可行性研究阶段所提交的文档,特 别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要 明确系统必须做什么的问题。本题的正确答案为D。23 .B数据库有三层模式结构,逻辑模式是数据的全局逻辑结构的描述, 外模式也称为子模式,是局部数据的逻辑结构描述,而内模式也称为存 储模式,是数据库物理存储结构和存取方法的描述。24 .编译编译25 .friend class B;friend class B;解析:在B
34、类中出现了对A类中私有成 员numl的直接访问,这是不允许的。所以必须要把类B设成类A的友 员就可以编译通过了。1.1 1 327 .格式化模型格式化模型解析层次模型与网状模型属于格式化模型。28 .重载 虚函数重载 虚函数 解析:C+编译时的多态性体现在重载, 运行时的多态性体现在虚函数。29 .成员选择运算符(或”.”);成员访问运算符(或”- )成员选择运算符 (或”.”);成员访问运算符(或)解析:本题考查的是使用对象和对象 指针访问成员所使用的符号的不同,考生请注意它们的区别。30.1231 .功能性功能性解析:注释一般分为序言性注释和功能性注释。序言 性注释通常位于每个程序的开头部
35、分,给出程序的整体说明;功能性注 释的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。32 .同名函数同名函数 解析:如果一个派生类有多个直接基类,而这些 直接基类又有一个共同的基类,这样存在的同名函数无法判断调用的确 定性。即存在二义性。33 .根节点根节点解析:在树结构中,每个节点之前有一个前件,称为 父节点,没有前件的节点只有一个,称为树的根节点。34 .循环循环35.2036 .( 1 )“staticintn=O应改为staticintn;。(2)“intCO:n;”应改为“intCO:n=0;(3)4tcoutc. nendl;应改为coutc-nnendl;37 .(1)
36、应改为catch(char*s)”。(2)应改为cateh(inti)”。(3)应改为catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw(”error”);,其 中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类 型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语 句修改为“catch(char*S)第2个标识前的异常抛出语句为 uthrow(int)0);,其中的类型为int。对应的异常捕捉语句catch中应 该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配 的catch块,系统就会调用一个系统函数,使程序终止
37、运行。即第2处 的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类 型,那么就用删节号“”表示它可以捕捉任何类型的异常信息,即修 改为 “catch()”。38 .(1)应改为“TC :TC”。n(2)应改为voidTC :display”。n(3)应改为“TC :TC”。n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名 和作用域运算符“:”,作用域运算符用采表示某个成员属于哪个类,使 用格式为“(类名):成员函数(参数函数),因此第1处应改为“TC : TC”,默认构造函数没有参数。由第2处“TC :display”后的语句看,这 是在类外实现T
38、C函数,因此也有作用域运算符使用错误问题,display 函数返回值为void,因此第2处的语句应改为“voidTC :display。由第 3处的语句叮(21:”可知,显然这里是在类外实现析构函数,析构函 数是一个特殊的函数,它的名称和类名相同,并在前面加“”字符,用 采与构造函数加以区别,因此第3处的语句应改为“TC :TC”。39 .(1)应改为catch(char*s)”。(2)应改为cateh(inti)”。(3)应改为catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw,error”);,其 中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类 型
39、,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语 句修改为“catch(char*S)”。第2个标识前的异常抛出语句为 44throw(int)0);,其中的类型为int。对应的异常捕捉语句catch中应 该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配 的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处 的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类 型,那么就用删节号“”表示它可以捕捉任何类型的异常信息,即修 改为 “catch()”。40 .(1)应改为“TC:TC”。(2)应改为voidTC:display”。应改为“TC:TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名 和作用域运算符“:”,作用域运算符用采表示某个成员属于哪个 类,使用格式为“(类名):成员函数(参数函数),因此第1处应改 为“TC:TC”,默认构造函数没有参数。由第2处“T