《2022年福建省龙岩市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年福建省龙岩市全国计算机等级考试C++语言程序设计真题(含答案).docx(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年福建省龙岩市全国计算机等级考试 C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .有以下类定义 class MyClass private :int id ; char gender ; char*phone ; public : MyClass() : id(0), gender(#), phone(NULL) MyClass(int no , char ge=# , char*ph=NULL) id=no ; gender=ge ; phone=ph ; );下列类对象定义语句中错误的是 A.MyClassmyObj ;C.MyClassmyOb
2、j(12, fmf);D.MyClassmyObj( 12);2 .在数据库设计中,将E-R图转换为关系模式的过程属于()。 A.需求分析阶段B.逻辑设计阶段C.概念设计阶段D.物理设计阶段3 .以下程序的输出结果是 #include void main () int a=0, i; for (i=l; i 5; i+) switch (i) case 0 : case 3 : a+=2; case 1 : case 2 : a+=3; default: a+=5; cout a endl; return; 4 .下列各种调试方法中,靠演绎、归纳以及二分法来实现的是()。A.强行排错法B.回溯
3、法C.原因排除法D.静态调试return 0 ;该程序的输出结果是【】。28 .在关系运算中,【】运算是在给定关系的某些域上进行的运算。29 .流成员函数 返回当前流的状态。30 .阅读以下程序,此程序的功能是【】。#include void main()(int n, i,j;for(i=100 ; i 999; i+100)for(j=i/100 : j =99 ; j=j+10)(n=i+j;cout n n n;)cout nnn;31 .问题处理方案的正确而完整的描述称为 o32 .指针变量所保存的不是一般的数据值,而是程序中另一个对象的33 .若有定义语句:int*a, b ;,则
4、变量b的数据类型是34 .重载的流运算符函数经常定义为类的【】函数。35 .假设inta=l, b = 2;,则表达式(+ + a/b) * b-的值为四、程序改错题(10题)36 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实 现的功能为从键盘输入一个字符串,并将结果保存到文件1. txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在* enror* * 日 jo试题程序:#include#include usingstd;voidWriteFile(char*s) ofstreamo
5、utl ;kI*个不不不不不不不不不不不不不不不outl. open(n 1. txt”, binary|app);for(inti=0; si!=O; i+)/不下不不不不可不error不不不不个不不不out!. puts(si);outl. close;)voidClearFile(ofstreamoutl ;outl. open(nl. txt);outl. close;) intmain(chars 1024;ClearFile;coutnpleaseinputastrin9 :nendl ;cin. getline(s, 1024);WriteFile(s);returnO;)37.
6、使用VC+ +6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现 的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在*err()r* 的 下面。试题程序:#include#include/ / *error*usingstd ;voidWriteFile(char*s) (ofstreamoutl ;/ / *error*outl . open(nl . txtn, binary|app);for(inti=0 ; si!=0 ; i + +)
7、(/ / *error*outl . puts(si);)outl . close ;)voidClearFile(ofstreamoutl ;outl . open(nl . txt);outl . close ;intmain chars 1024;ClearFile ;coutnpleaseinputastrin9 :nendl ;cin . getline(s, 1024);WriteFile(s);returnO ; 38 .使用VC + +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(S
8、l)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / * * * * * error* * * * * *的下面。不能删除assert ()语句。(2)只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain () chartsl=nabcn:个个个个个个小小个个个个个个个个assert(sizeof(s 1 )=3): coutnsizeof(sl)=5nendl ;chars210=nabn:个个个个个个个个个个个个个个个
9、个assert(sizeof(s2)=2);cout,fsizeof(s2)=10nendl ;chars3=23 :2*个个个个个个个个rror个个个个个个个个assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ;39 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/ / *errc)r*的下面,修改该语句即可。试题程序:#includevoidmain不不不不不不en0r不不不不不不intm=0142:intn=0X27 :intq=32
10、;cout m endl;cout n endl ;cout q endl;return ;40 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1 number=10 number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#include classTC public:TC(inti) number=i;voidSetNumber(intm) number=m;intGetNumberconst returnn
11、umber;)voidPrintconst coutnnumber=Hnumberendl;private:intnumber;voidmain*1个个个个个个个个nor个个个个个个个个TCobjl;objl. Print;TCobj2(3);vl*vt* kI*不不不不不不不不noi*不不不不不不不不objl. number= 10;/ / * * *TC. SetNumber(lOO);objl. Print;obj2. Print;41 .使用VC + +6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,
12、 i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include(iostream . h)classTC (inti ;public :TC ;voiddisplay ;TC ;TC :TC coutnConstructornn, i=0;kL*kL* vl*不不不不不不en*or不不不不不不TC : display toutni=nin, nendl ;不不不不不不en*or不不不不不不TC : TCCOUInDestructornendl :voidmainTCa ;a . display ;42 .使用VC+6. 0打开考生文件夹
13、下的源程序文件L cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include(iostream. h) classTC5 .下列关于类和对象的叙述中,错误的是()0A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系6 .下列选项中不属于软件生命周期开发阶段任务的是()。A.软件测试B.概要设计C.软件维护D.详细设计7 .有以下程序:#include using names
14、pace std ; int main() chara10 = r, 2, 3, 4, 5, 6, 7, 8, 9, 0), *p ; inti=8 ; p=a+i ; cout p-3 endl ; return 0 ; 执行程序后的输出结果是 ()oA.6B.6789 C.6 D.7898 .阅读下面的程序:#include void main() int x; cin x; if(x+ 5) cout x endl; else cout x endl;)如果两次 执行上述程序,且键盘输入分别为4和6,则输出结果分别是()。A.4, 6B.3, 6C.4, 7D.5, 79 .以下程序段的
15、执行结果是()。#include Voidmain() int a, y; a=10;y=l do a+=2; y+=a; cout a =n a J ny=n y 20) break; while(a 7 7 7,T,不不不小不不erpor不不不小不下TC: TC coutnConstructornn,i=0;不不不不不不en*or不小不不不小TC: display tout”i=i classCO public:个个个个个个个个个个个个个个个小staticintn=O :CO n+ + :CO n-:):kL* vl* kL*不下不不不不不不不不不不不不不intCO: n;voidmain
16、COobj ;COobj27;CO*C=NULL:c二 & obj :个个个个个个个个个个个个个个个个eoutC . nendl ;coutC0: nendl;44 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#include voidmaincharstr120;coutnEnterastringendwith?.
17、 nendl;vl* kL*vL#vL* k1* vfkL*小小个个个个个个nor个个个个不小个个cin. getline(str, 120);1* .!vt*个个个个个不小个nor个个个个个个个个while(str)KL KLKLk1 KE个个个个个个个个rror个个个个个个个个if(stri)=a)stri=stri-a+A;i+ + ;)coutstrendl ;return ; )45 .使用VC+ +6.0打开考生文件夹下的源程序文件1 .cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number= 10number = 100注意:不要
18、改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#include classTCpublic :TC(inti) (number=i ; voidSetNumber(intm) (number=m ; intGetNumberconst(returnnumber ;) voidPrintconst(cout 77 7 7,7,/不不不不不不不不error不不小不不不不不objl . number=10 ;/ / * error* *TC . SetNumber(lOO);objl . Print ;obj2 . Print ; )
19、五、综合应用题Q题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程 proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个 类的赋值运算符成员函数Operator,以实现深层复制。要求:补充编制 的 内 容写在“* *333 * *与“*666*”之间o不得彳修改序的苴彳也部 分。注意:程序最后将结果输出到文件out. dat中。输出函数writeToFile 已经编译为。bj文件,并且在本程序中调用。/CDeepCopy. h#include #includeusing namespace std;class CDeepCopy public:int
20、n;动态数组的元素个数int*p;动态数组首地址CDeepCopy(int);CDeepCopy;CDeepCopy&operator=(const CDeepCopy&r); 赋值运算符函数;void writeToFile(char);/main. cpp#includeCDeepCopy h”CDeepCopy : : 一 CDeepCopy deleteP; CDeepCopy: CDeepCopy(int k)n=k; p=new intn;构造函数实现CDeepCopy&CDeepCopy : Operator=(const CDeepCopy&r)赋值运算符函数实现(/ /sL*
21、vl* *1*vl* *1*/ / /卜一卜卜 /卜/ / *J*1* *1* six 1* X*4si*/ /不不不不不不不不不不不hhh不不不不不不不不不不不)int main(CDeepCopy a(2), d(3);a. pO=l; d. pO=666;对象a, d数组元素的赋值(CDeepCopy b(3);调用赋值运算符函数a. pO=88; b=a;coutb. pO;显示内层局部对象的数组元素)coutd. p0;显示d数组元素a. p0的值cout”d fade away; n;couta. p0;显示a数组元素a. p0的值 writeToFile(,);return 0
22、;47 .使用VC+6. 0打开考生文件夹下的源程序文件3. cpp。其中定 义的类不完整,按要求完成下列操作,将类的定义补充完整。定义类的公有数据成员函数NO、Name32,其中NO是int型的数据,Name32为字符型。请在注释1后添加适当的语句。完成函数Set的定义,分别设置NO和Name的值,请在注释2后添 加适当的语句。完成函数print,请在注释3后添加适当的语句,输出结果如下:N0=12345N ame=HelloW orld!(4)添加默认构造函数,设置NO为0, Name为空,请在注释4后添加 适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其 他的程序
23、代码。试题程序:#includeclassTC (public:/ kL*i7” 7,/rT*IrT*/vl*vi* kL* k1* k1 *j *1 *1、rj* J rj *y 、J rjNo=no;for(inti=0; strNamei!=O; i+)Namei=strNamei;Namei+1=0;)voidprint ()/7,7, 7,*1 *1 k1/rj* rj* 4rj* ryw)TC ()I I *4*);intmain ()(TCstu: print ();stu. Set( 12345, nHelloWorld!n);returnO ; )六、3.综合应用题(2题)4
24、8 .使用VC6打开考生文件夹下的工程test5_3o此工程包含一个源程 序文件test5_3.cpp,其中定义了一个类Pn,用于求n!。请按要求完成下 列操作,将程序补充完整。定义私有数据成员value(存放n)和fact(存放n!),它们都是ht型的数 据。请在注释“*1*”之后添加适当的语句。完成默认构造函数Pn的定义,使Fn对象的数据成员value值为i, fact值为10请在注释“*2*”之后添加适当的语句。完成函数Cal的定义,该函数计算value的阶乘,并将运算结果保存 在fact中,要求使用while循环实现。请在注释“*3*之后添加适当 的语句。(4)将主函数补充完整,直接调
25、用类的成员函数,在界面上输出value的 阶乘值。请在注释“*4*”之后添加适当的语句。注意;除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test5_3.cpp清单如下:#include class Fn*public :Fn(int i); void Cal(); void disp(););Fn:Fn(int i) void Fn:Cai()10 .下列语句中,错误的是A.constintbuffer=256 ;B.constinttemp ;C.constdouble*point ;D.constdouble*rt = newdouble(5.5);二、单选题(13题
26、)11 .有如下程序:#include using namespacestd ;class VAC public;intf () const(return 3 ; intf () return 5 ; );Intmain () VACvl; constVACv2;coutvl. f () v2. f ();return 0 ;)运行时的输出结果是()OA.53 B.35 C.55 D.3312 .能正确表示逻辑关系”aN10或aSO”的C + +语言表达式是()。void Fn:disp() (cout value != fact endl;)void main() (int value;co
27、ut value;Fn A(value); )49.使用VC6打开考生文件夹下的工程test8_3,此工程包含一个源程 序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅 读已有的代码,按要求完成下列操作,将程序补充完整。定义类Table的私有数据成员x和y,分别用于表示九九表中的两个 乘数(x*y),它们都是血型的数据。请在注释“*1*”之后添加适当的 语句;完成类Table的成员函数prin()的定义,该函数以x*y=z”的格式打印 出九九表中的一个乘法算式,请使用格式化输出函数prinff实现,在注 释“*2*,之后添加适当的语句;完成类Table9的成员函数pr
28、int。的定义,该函数调用基类Table的 print。函数,将九九表输出到屏幕,请在注释“*3*”之后添加适当的 语句;(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“*4* ”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test8_3.cpp清单如下:#include #include class Table ( * int z;public:void print(int x, int y, int z););void Table:print(int x, int y, int z)()class Table9:pu
29、blic Table(public:void print();;void Table9:print() (intx, y, z;for (i=l;i 10;i+)(for(j=l;j 5不成立,因为 “+”后缀,之后x的值变为5,执行语句cout x- 5成立,所以 执行语句cout x endl ;输出7。9.B10.B解析:本题考查了符号常量的特点。符号常量必须在声明的同时为其 赋初值。因此选项B是错误的。选项C定义的是一个指向常量的指针 变量,即通过该指针不能改变它所指向的内容,而它自己的内容是可 以改变的。定义指针符号常量的格式应该是:double*constu3000point =某
30、地址值所以选项C是合法的,它可以不用在声明时赋初值。 故应该选择Bo11 .AAo本题考查常成员函数的应用。VAC类中说明了两个函数,一个是 常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普 通对象V1调用的是普通函数,输出5;通过常对象v2调用的是常成员 函数,输出3。12 .DDo【解析】逻辑运算符“II”表示或的意思。13 .C14 .A解析:引用比较特殊,即必须指向一个已有的同类型变量。引用是 已有变量的别名,故选项u3000C是错误的,选项D中变量类型不同, 而选项B中是常数。15 .CC+语言中默认小数的输出位一共是6位,fixed的意义是在小数点后 保留6位。16.B
31、17.B解析:本题考查的是输入输出函数的使用,gets和getchar函数用于从 标准输入设备终端读八字符串和字符,并非从磁盘文件读入,fputs用 于把字符串输出到文件,fwrite用于以二进制形式输出数据到文件,故 选项B)描述错误。18.D解析:本题考查的知识点是;语句块和函数。if语句的分支和循环语 句的循环体可以是一条语句也可以是一个语句块,所以不是必须用一 对大括号括起来;switch语句中的case标号语句可以是一系列语句,也可以包含语句块,也不是必须用一对大括号括起来:函数的函数体 必须使用一对大括号括起来。故本题应该选择D。19.C解析:编译时的多态性是通过函数重载和模板体现
32、的,运行时的 多态性是通过虚函数体现的。20.DDo【解析】根据题意,找出数组a中最大值si和最小值s2并计算二 者的和。21.ACo【解析】本题中类TestClass为基类,TestClassl为TestClass的派 生类。由main主函数入手,定义TestClassl类型的对象dl,参数值为 y。TestClassl 类继承 TestClass,所以主函数中“TestClassldl(y);”语句 首先调用“TestClassl(charc)colllwC;”然后调用基类中的 TestClassCOUtX;厂输出X,然后执行UTestClass(charc)coutc;“输出 y,即答案
33、为xy”。22.B23 .C解析:此题考查的是内联函数的概念.在调用时,内联函数会像宏 函数一样地层开,将调用表达式用内联函数体来替换,所以它没有一般 函数的参数压栈和退栈操作,所以选项A)错误;即使没有使用inline 说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以 选项B)错误:内联函数只是比普通函数有更高的执行效率。对于类型 为void的函数,它不需要返回任何函数值,所以在函数体中既可以使用 return语句,也可以不使用,选项D)错误。24 .成员名限定符成员名限定符解析:程序要求显式调用某个类的成员 时,必须使用成员名限定符。其一般格式:类名:成员名或 : ( )25
34、.count=426 .file2.open(fn2ios : out);file2.open(fn2, ios : out);解析:fetream 没 有默认的打开模式,因此在打开文件时必须在ios_base :out.lOs_base :ins ios_base : in/ios_base : out这三个打开模式中指定外。27 .efgh28 .投影投影解析:在关系运算中,投影运算是在给定关系的某些域上 进行的运算。29 .rdstate()30 .求100到999的回文数求100到999的回文数31 .算法算法32 .内存地址内存地址33.intint解析:缺数据类型。34.友元友元3
35、5.22解析:运算符“+ +”的优先级高于双目运算符“/,所以括号中的 运算为2/2,最后的结果为2/2 *2。36 .( 1)应改为usingnamespacestd;。应改为outl. open(l. txt, ios: binary I ios: app);(3)应改为“outl. put(si);【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std, 对于C+ +中引入标准命名空间的格式,缺少namespace,所以第1处 的语句修改为“usingnamespacestd;。第2处,调用成员函数open 中,输入、输出方式是在ios类中定义的,所以“outl. o
36、pen(l. txt, binary I app);”语句缺少类ios,即第2处的语句修改为“outl. open(l. txt, ios: binary I ios: app);第 3 个标识应 该用流成员函数put输出字符,所以第3处的语句修改为 “outl. put(si);37 .(1)应改为usingnamespacestd ;n应改为“outl . open(l . txt, ios : binary | ios : app);。n(3)应改为“outl . put(si);n【解析】本题第1处的“usingstd厂是在程序中引入标准命名空间std, 对于C + +中引入标准命名空间的格式,缺少namespace,所以第1处 的语句修改为usingnamespacestd ;第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“outl .open是.txt, binary | app)二语句缺少类ios,即第2处的语句修改为“outl .open(2 .txt: ios : bin