《2022年广东省广州市全国计算机等级考试C++语言程序设计预测试题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年广东省广州市全国计算机等级考试C++语言程序设计预测试题(含答案).docx(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年广东省广州市全国计算机等级考试 C+语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列程序的输出结果是()。#include using namespace std; template T fun(T a,T b) return(a =b)?a:b;) int main() cout fun(3,6) ; fun(3.14F,6.28F) endl; return 0; A.0, 3.14 B.3, 3.14C.3, 3D.3.14, 3.142 .面关于类的静态成员,说法正确的是 oA类的静态成员函数只能访问类的静态数据成员B.类的静态成员函数
2、可直接访问类的所以数据成员C类的每个对象都有一份自己的静态数据成员D.静态数据成员只能通过“类名:”进行访问3 .以下程序段的执行结果是()。inta,y :a=10 ;y=10do a+=2 ; y+=a ; cout a 11 ny=n y 20)break : while(a =14);A.a=12,y=12 a=14,y=16B.a=12,y=12 a=16,y=28C.a=12,y=12 a=14,y=26D.a=12,y=12 a=14,y=444 .下列关于i的输出值,正确的是()。voidClearFile ofstreamoutl ;outl . open(l . txt);
3、outl . close ;)intmain(chars1024;ClearFile ;coutpleaseinputastrin9 : endl ;cin . getline(s, 1024);WriteFile(s);returnO ;)39 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有 错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行 的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *error*的下面。试题程序:#includeiost
4、ream. h) intmain(try(throw (error);)/ / *error* catch(chars)(coutsendl;)try(throw(int)0); / / *error*catch coutiendl;trythrow(0);throw(error);/ / *error* catch(coutz/ERRORzzendl;)returnO;40 .使用VC + + 6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错,请改正 其中的错误,使程序正常运行,并使程序输出的结果为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)
5、=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ *errc)r*的下面不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain () char*sl=abc: / / *error* assert(sizeof(sl)=3): coutsizeof(sl)=5endl ; chars210=ab:/ / *error* assert(sizeof(s2)=2); coutsizeof(s2)=10endl ; chars3=23 : / / *er
6、ror*assert(sizeof(s3)=4);coutsizeof(s3)=lendl ; return ;)41 .使用VC + +6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行有问题,请改正 main函数中的错误,使程序的输出结果为: number = 1 number = 10 number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *errc)r*的下面 试题程序:#include classTC ( public : TC(inti) ( number=i ; voidSetNumber(intm) ( num
7、ber=m ; intGetNumberconst ( returnnumber ; ) voidPrintconst ( cout,number=numberendl ; ) private : intnumber ; ); voidmain (/ / *error* TCobjl ; objl . Print ; TCobj2(3);/ / *error* objl . number=10 ;/ I *errc)r*%o*TC . SetNumber(lOO); objl . Print ; obj2 . Print ; )42 .使用VC+6. 0打开考生文件夹下的源程序文件L epp,
8、该程序运行时有 错,请改正其中的错误,使程序正常运行,输出的结果为 Constructor, i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:ftinclude(iostream. h) classTCinti;public:TC;voiddisplay;TC;;/ / *error*TC: TC cout Z/Cons true tor/z,z, i=0; / / *error*TC: display tout/i=/i/, zzendl; / / *error*TC: TCCOUI/zDestructor/zendl : voidmai
9、nTCa;a. display;43 .使用VC + +6 .0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串, 然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符时,默认字符 输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#includevoidmaininti=O ;charstr120;coutEnterastringendwith? . endl ;/ / *error*cin . getline(str, 120);I I *error*whil
10、e(str)(/ / *error*if(stri)=a)stri=stri-a + A ;i+ + ;coutstrclassCOpublic:/ *error* /staticintn=O:COn+ + : ) CO n: ) :/ *error* / intCO: : n; voidmain (COobj;COobj27;COONULL: c=&obj: / *error* / eoutC. nendl; coutC0: : nendl;45 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能 为从键盘输入一个字符串
11、,并将结果保存到文件1. txt中。注意:不要改动Min函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *errc)r*的下面。试题程序:#include#include/ / *error*usingstd;voidWriteFile (charts)(ofstreamoutl;/ / *error*outl. open(l txt, binary|app);for(inti=0; si !=0; i + + )(/ / *error*outl. puts (si); outl. close;voidClearFile ofstreamoutl;outl. open(/z
12、l. txt);outl. close;intmain(chars1024;ClearFile;coutz/pleaseinputastrin9: (endl;cin. getline(s, 1024);WriteFile(s);returnO;五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其 中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个 整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这 些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将 一个元素添
13、加到集合中(如果集合中不存在该元素),成员函数remove从集合中 删除指定的元素(如果集合中存在该元素)。请编写成员函数remove。在main 函数中给出了一组测试数据,此时程序的正确输出结果应为:2 3 4 5 27 28 31 66 752 3 4 5 6 27 28 31 56 752 3 4 5 6 19 27 28 31 66 753 4 5 6 19 27 28 31 66 753 4 5 6 19 27 28 31 66 75要求:补充编制的内 容写在“/*333*”与 */*666*”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out. dat中。输出函数w
14、riteToFile已经编 译为。bj文件,并且在本程序中调用。/IntegorSet. hftifndef INTEGERSETftdefine INTEGERSET#includeusing namespace std;const int MAXELEMENTS=100; 集合最多可拥有的元素个数class IntegerSet int elemMAXELEMENTS;用于存放集合元素的数组int counter; 用于记录集合中元素个数的计数器public:IntegerSet: counter(0) 创建一个空集合IntegerSet(int data, int size);利用数组提
15、供的数据创建一个整数集合void add(int element);添加一个元素到集合中void remeve(int element);删除集合中指定的元素int getCountconstreturn counter; 返回集合中元素的个数int getElement (int i) const return elemi ; 返回集合中指定的元素 void showconst;;void WriteToFile(char*);ftendif/main, cppftincludev IntegerSet. h#includeIntegerSet: : IntegerSet (int data
16、, int size): counter (0) for(int i=0; i0; j-)if (element=elemj 一 1)break;如果找到的是等于element的元素,说明要添加的元素已经存在,直接返回 if(j0)if (element=elemj-1) return;如果找到的是小于element的元素,j就是要添加的位置该元素及其后面的元素依次后移,腾出插入位置for (int k=counter; kj; k 一)elemk=elemk 一 1;elemj=element; /将 element 插入到该位置counter+; 计数器加1)void IntegerSet
17、: : remove(int element)/ /1*2 2 J sl lz sl 1 lz lz sl J sl viz/不不不不不不不不不不不小不不不JJJ不不不不不不不不不不不不小不不void IntegerSet: : showconst for(int i=0; KgetCount; i+) coutsetw(4)getElement(i); coutclassBA inta;public:/ |/#T xts Ts 7s xtx Tv xT% I Tx Ts 7% Ts T% r% 7%intgetareturna; ) classPAl: publicBA intb;publi
18、c:/six six six six * ) six %lx %lx lx lx vix vjx six/ 不不不不不不不不乙不不不不不不不不intgetbreturnb; );classPA2: publicPAl intC;public:/ 不不不不不不不不J不不不不不不不不voidshow/ / *4* ) voidmain(PA2a(7, 5, 10); couta. getaendl; couta. getbendl; a. show;六、3.综合应用题(2题)48,使用VC6打开考生文件夹下的工程test24_3,此工程包含一个源程序文件test24_3cpp, 其中定义了抽象类p
19、oint和它的派生类line,但它们的定义并不完整。请按要求完成下列操 作,将程序补充完整。定义类point的构造函数,函数含参数i和j它们都是int型数据,默认值都是0,用i和 j分别将point的数据成员x0和y0初始化。请在注释“内1*”之后添加适当的语句。完成类point的成员函数纯虚函数void set()和void draw。的定义,请在注释7/*2*” 之后添加适当的语句。添加类line的构造函数,函数含参数i, j, m和n,它们都是int型数据,默认值都是0, 用i和j分别将point的数据成员x0和y0初始化。请在注释7/*3*”之后添加适当的语 句。输出结果如下:line
20、:set()called .注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test24_3.cpp清单如下: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+) i+; cout i; )则输出值为 13oDC程序的输出值为55 .在函数说明时,下列不必要的是()项。A.函数参数的类型B.函数参数名字C.函
21、数的名字D.返回值表达式6 .下列程序的运行结果是 #include void fun(int *a, int*B)int *k ; k=a ; a=b ;b=k ; void main() int a=3, b=6, *x=&a, *y=&b ;fun(x, y) ; cout a b; )A.63B.36 c.编译出错 D.O7 .下面正确的函数定义形式为()。A.void fun() ;)8 .void fun(int x ; int y) C.void fun() D.void fun(int x, y) 8.设有定义int a= l;float f= L2;char c二宣;则下列表
22、示错误的是A. + + a; B.f; C.c + + ; D.8 + + ;#include class point public:/*11*2*protected:int xO,yO;)class line: public point(public:/*3*(xl=m;yl=n;)void set() cout nline:set() calledAn;void draw() cout set();)49,使用VC6打开考生文件夹下的工程testl9_3,此工程包含一个源程序文件testl9_3.cpp, 其中定义了用于表示向量的类vector,但类vector的定义并不完整。请按要求完成
23、下列操 作,将类vector的定义补充完整。补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为0。 请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。请在注 释“*1*”之后添加适当的语句。(2)完成类vector的成员函数input(int xjnty)的定义,将int型的参数x和y分别赋值给数据 成员a和b,请在注释7/*2*”之后添加适当的语句。完成类 vector 的友元函数 friend double Multiply (vector &x,vector &y)的定义,先定义 double型的临时变量c,然后将参数对象x和对象y
24、的数据成员a与b分别相乘再相加后 赋值给c,最后返回c的值,将请在注释“*3*”之后添加适当的语句。输出结果如下: (10, 20)(2, 3)80注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件testl9_3.cpp清单如下:#include class vector(int a;int b;public:/*void input(int x, int y)()void output ()(cout C a 7 b ) endl;)friend double Multiply(vector &x,vector &y);)double Multiply (vector
25、&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);x. output ();y. output ();cout d n|j m、class(参数名、(类型修饰X参数名三种形式,形参用 “ ”括起来。17.D本题考查的是静态数据成员的使用,n为类A的静态成员,即为类A的所有对 象共有的成员,所以,当对象b把n初始化为3时、对象a的成员u的值也为 3(这两个11实际上是同一个)。18.B解析:char型数据所占内存的大小为1个
26、字节。注意:int型数据占内存的大小为4个, cong double, double占内存的大小为8个字节。注意:求字节数用sizeof运算符。19.A20.C解析:在赋值操作中,将发生对象的拷贝操作,但并不说明两者是完全一样的.一般情 况下,如果绐类定义了赋值操作符,则应该同时定义合适的拷贝构造函数,除非系统默认生 成的拷贝构造函数满足赋值操作。实际上,系统默认的拷贝构造函数仅仅将数据成员进行简 单的对应赋值,而在多数特殊应用中,这么简单的对应关系是不适用的,这就需要程序员重 新定义拷贝构造函数。21.A本题采用递归函数的方式将数组中的元素进行倒置,正确答案为Ao22.DDo【解析】在C语言
27、中if关键字后的一对圆括号中的表达式可以是c语言中 任意合法的表达式。23.CCo【解析】针对递归调用的含义。当n为2时有fib(o), fib(l), fib(2)被 调用,且fib(O), fib(l)时调用结束,即共3次。24,ThisThis解析:程序中利用对象ofile在文件temp.txt中写入“This is a book 54321” o然后利用对象ifile打开文件,将其中的数据输入到变量str中,由于读时遇到空格就终止, 所以str中存放的字符串为“This”。25 .层次模型层次模型解析:用树形结构表示实体类型及实体间联系的数据模型称为层次模 型,用有向图结构表示实体类型
28、及实体间联系的数据模型称为网状模型,用二维表格结构表 示实体及其联系的数据模型称为关系模型。26 .数据库系统数据库系统解析:在人工管理阶段,数据无法共享、冗余度大,完全依赖于 程序;在文件系统阶段,数据共享性差;而精据库系统具有三级模式及二级映射的抽象结构 系统,从而保证了数据独立性的实现。27 .类类解析:本题考查的是类模板的使用方式,就是把类模板的一般化定义实例化为一个 真正的类。28 .template class dataClasstemplate class dataClass解析:类模板声明的一般格式为:template Class类名类成员声明;其中类型参数可以为多个。题中出现
29、了两个类型参数TL T2,故应该在类模板的头部声明 中声明两个类型参数Tl、T2O29 .数据结构数据结构30 .Myhomeis H31 .bool32.108108解析:第一个元素占用100和101,第二个元素占用102和103,第三个元素占 用104和u3000105,第四个元素占用106和107,第五个元素占用108和10933 .语法错误连接错误语法错误连接错误34 .Worker* r = new WorkernWorker*u3000r = newu3000Workern解析:在 C+ +中动 态分配栈上内存的命令是new,释放命令是delete,注意和C语言中的malic和fr
30、ee向对 应。35 .33解析:当要插入60时,前6个元素已有序,即为:15, 23, 38, 54, 72, 96,需从 后向前比较到54为止,故要比较3次。36 . (1) “voidmain”。(2) “intm=0144;”。(3) u intn=0X25; ” 或 u intn=0x25; ”。【解析】本题主要考查了主函数定义及幕同进制之间的转换,包括十进制到八 进制,十进制到十六进制。主函数定义的定义形式为“main”,函数名之后必 须是一对括号,因此第1处应改为“voidmain。cout输出默认是以十进制方 式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100
31、 对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成aintm=0144; ”,uintn=0X25;”或 uintn=0X25; ”。37 . (1)应改为catch(char*s) ”。(2)应改为 cateh(inti) ”。(3)应改为 catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw(error); ,其中 的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程 序中给出的语句“cat ch (chars)”是字符型的,所以第1处的语句修改为“catch (char*S) ”。第2个标识前的异常抛出语句为“throw(i
32、nt) 0);”, 其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补 充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个 系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在 catch子句中没有指定异常信息的类型,那么就用删节号表示它可以捕 捉任何类型的异常信息,即修改为“catch()”。38 .应改为usingnamespacestd ; 。n应改为 Uoutl . open(l . txt, ios : : binary | ios : : app) ; Mon应改为 Uoutl . put(si) ; n
33、 on【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C+中引 入标准命名空间的格式,缺少namespace ,所以第1处的语句修改为 usingnamespacestd ; no第2处,调用成员函数open中,输入、输出方式是在ios类中 定义的,所以Uoutl . open(1l . txt, binary | app); ”语句缺少类ios,即第2处的语句修 改为 “outl . open(l . txt, ios : : binary | ios : : app); ”。第 3 个标识应该用流成员函数 put输出字符,所以第3处的语句修改为Uoutl .
34、 put(si); ”。39 .应改为catch(char*s) ”。(2)应改为 cateh(inti)”。应改为“catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw(error); ,其中 的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程 序中给出的语句catch(chars)是字符型的,所以第1处的语句修改为“catch (char*S) ”。第2个标识前的异常抛出语句为“throw(int)0);”, 其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补 充catch子句中的类型,否则如果找不到匹配的catch块,系统
35、就会调用一个 系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在 catch子句中没有指定异常信息的类型,那么就用删节号表示它可以捕 捉任何类型的异常信息,即修改为“catch()”。40 .应改为 “assert(sizeof(sl)=4);。n应改为 aassert(sizeof(s2)=lO);。n应改为 uassert(sizeof(s3)=1); ”。n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果, 那么assert函数只有为真,才不会产生中断异常。uassert(sizeof(sl)=3) ; n语句中 “sizeof(sl)=3”为假,这会使程序产生异常,不能正常执行。因为strl的值为abc,但是 它还有一个尾符,它的长度应