《2022年甘肃省定西市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年甘肃省定西市全国计算机等级考试C++语言程序设计真题(含答案).docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年甘肃省定西市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列叙述中正确的是A.在面向对象的程序设计中,各个对象之间具有密切的联系B.在面向对象的程序设计中,各个对象都是公用的C在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小D.上述三种说法都不对2 .设有如下程序段:charstr=World” ; char*ptr=str ;执行上面的程序段后,*(ptr+5)的值为 o.不确定的值D.Q的地址3 .下列关于运算符重载不正确的是()A.运算符重载不能改变运算符的操作数个数B.运算符重载不能改变运算符的优先级C.运算
2、符重载不能改变运算符的结合性D.运算符重载能改变对预定义类型数据的操作方式4.关于输入流的提取符“”、提取函数get()的说法不正确的是()。A.提取符“ ”能提取空白字符注意:错误的语句在/ I *error*的下面,修改该语句即可。试题程序:#include(iostream . h) classTCinti ;public :TC ;voiddisplay ;TC ;/ / *error*TC : TCcoutnConstructornn ”i=0 ;)/ / *error*TC : displaytout ,i=nin nendl ,/ / *error*TC : TCCOUInDes
3、tructornendl :) voidmain(TCa ;a . display ;38.使用VC + +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:9, 8, 7, 6, 5注意:错误的语句在/ *error* /的下面,修改该语句即 可。其他的语句不能修改。试题程序:#include(iostream . hclassTC(不不不不不不不不en*or不不不不不不不不/TC(inti)(m_i=i ;)voidprint(coutm_i,;)public :intm i ;intmain个个个个个个个rror个个个个个个个个int
4、i ;TC04(10); while(i5)! * * * !i+ + :04 . print ;coutendl ;returnO ;39.使用VC+6. 0打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在* error* * 白勺 卜 H jo试题程序:#include#includevl* vl*vl*个个个个个个个个rror个个个*个个个个usingstd;voidWriteFile(char*s
5、)(ofstreamoutl ;/不不不不不不不不error不不不不少不不不outl. open(l. txt, binary|app);for(inti=0; si!=0; i+)(/ 7 7 7 7,7 7 77 7,7,7 7 7 7,7,/不不不小不不不不error不不小不不不不不outl. puts(si);)outl. close;)voidClearFile(ofstreamoutl ;outl. open(nl. txt);outl. close;)intmain(chars 024;ClearFile;coutnpleaseinputastrin9 :nendl;cin. g
6、etline(s, 1024);WriteFile(s);returnO ;40 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序 运行时有错误,请改正错误,使程序正常运行,并且要求最后一个 catch必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#includeclassCOpublic:/77 7 kI 7,不不不不不不不不en0r不不不不不不不不staticintn=O :CO(n+ + :)CO(n:):不不不不不不不不en*
7、or不不不不不不不不intCO:n;voidmain(COobj ;COobj27;CO*C=NULL:c= & obj :小不不不不小不不en*or不不不不不不不不eoutC . nendl ;coutC0:nendl;42 .使用VC+ +6 . 0打开考生文件夹下的源程序文件1 ,cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现 的功能为从键盘输入一个字符串,并将结果保存到文件1 . txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在*error* 的 下面。试题程序:#include#include/ I *error*using
8、std ;voidWriteFile(char*s)ofstreamoutl ;/ / *enx)r*outl . open(nl . txtM, binary|app); for(inti=0 ; si!=0 ; i+ +) (I I *error*outl . puts(si);)outl . close ;)voidClearFile ofstreamoutl ;outl . open(nl .txt);outl . close ;) intmain chars 1024;ClearFile ;coutnpleaseinputastrin9 :nendl ;cin . getline(s
9、, 1024);WriteFile(s);returnO ;)43 .使用VC+6.。打开考生文件夹下的源程序文件1. cpp。本程序 要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#include voidmain(inti=O;charstr120;coutnEnterastringendwith?nendl ;/不不不不个不不不error不不小不不不不不cm.getline(s
10、tr, 120);kI个个个个个个个个nor个个个个个个个个while(str)7,7,7,7, 7,1、! 7,个个个*t*不不个下nor个个个个个个个个if(stri)=a) stri=stri-a+A;coutstrendl ;return;44 .使用VC+6.。打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *error*的下面。试题程序:#include n为tr
11、ue或m n&m k! 1J *1 *J *1 vl* *J *1个个个个个个个个rror个个*个个个个个catch(chars) coutsendl;throw(int)0);个个个个个个个个nor个个个个个个个小catch coutiendl;) try throw(O);throw(nerrorn);kI*vt*vl* kL*个不不不不不不不noi*不不不不不不不不catch coutnERRORnendl;returnO ;45,使用VC + +6.0打开考生文件夹下的源程序文件1 .cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(S
12、l)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。不能删除assert ()语句。(2)只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain () (charts l=abc:/不不不不个不不小error不不不个不不小不assert(sizeof(s 1 )=3):coutMsizeof(sl)=5!,endl ;chars210=ab: /不不不不不不不不error不不不不不不不不assert(
13、sizeof(s2)=2); coutnsizeof(s2)=10nendl ;chars3=23 :sX*sl sfX sX个个个个个个个个个个个个个*r* *t*个assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ; )五、综合应用题(2题)46.使用VC+6. 0打开考生文件夹下的源程序文件3. cpp,其中定 义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公 有派生。定义类A的构造函数,该构造函数有一个整型的参数x,在构造函 数中请将x赋值给数据成员a。请在注释“/ / *1*”之 后添加适当的语句。(2)定义类A1
14、的构造函数,该构造函数有两个整型的参数x和y,在构 造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数 值传人。请在注释“/ / *2*”之后添加适当的语句。定义类A2的构造函数,该构造函数有3个整型的参数x, y和z, 在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1 构造函数的参数x和y。请在注释“/ / K3*51s”之后添加 适当的语句。(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输 出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值 在输出时以空格隔开。请在注释“/ / *4*”之后添加适 当的语句。程序输出结果如下:73738
15、注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。 试题程序:#includeclassA(inta;public:/ / *intgetareturna; ;class Al : publicA(intb;public:/ / *2*intgetb returnb ; ;class A2: public Al intC;public:voidshow/ I *4*;voidmainA2a(8. 3. 7):couta . getaendl :couta . getbendl :a. show;47.使用VC+6. 0打开考生文件夹下的源程序文件3. cpp。其中定 义的类不完整,按
16、要求完成下列操作,将类的定义补充完整。每卖出 一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及 总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型 变量AHN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加到AllWeight中,并且AllNo自加。请在注释2后添加适当的语句。(3)在析构函数中,在AllWeight中减去weight,然后析INo自减,请在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加
17、适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其 他的程序代码。试题程序:#include(iostream. h classTCFruit private:floatWeight;vL* i kL* *1* vL* vl* vl* kL* 4、,J、,卜 q、4、-、I q、4、-、Fq、q、4、staticintAHNo;public:TCFruit(floatw)/ kL*1* kL*/J rj* rr*rj* rT* rTwAll Weight十二w:A11NO+ + :TCFruit/si* si* k1* kI*1* kL*/ q. q、q.4、 4 q、q
18、.、q. q.AllWeight-=Weight:voiddisplay(coutnSellaFruitwithnWeightnk9nendl;coutvvAllsellnumber:nAllNoendl;coutnAllsellweight:nAllWeightnk9n endlendl;I I *4* floatTCFruit: AllWeight=O. 0;intmain(TCFruitFruitl( 1. 2);Fruitl. display;TCFruitFruit2(2. 3);Fruit2. display;returnO ;)六、3.综合应用题(2题)48.使用VC6打开考生文
19、什夹下的工程testl_3o此工程包含一个testl_3.cpp,其中定义了类 circle 和 column,其中 column 类由 circle 类 protected派生,但两个类的定义并不完整。请按要求完成下列操作,将 程序补充完整。定义类circle的保护数据成员r和area,它们都是double型的数据。请在注释“/* 1 * ”之后添加适当的语句。添加类circle的无参数的构造函数,使circle对象的r默认值为0,请 在汁释“*2*,之后添加适当的语句。(3)添加派生类column构造函数的定义,传入的参数为double型的height 和radius,并将具分别赋值给数描
20、成员h和基类的r,请在注释“*3* 之后添加适当的语句。(4)完成派生类column的成员函数print的定义,使其以格式“r=_area=_ 先输出半径r和底面积area,再以格式“h=_vol=_”输出高h和体积vol 的值,请在注释“*4*”之后添加适当的语句。输山结果如下:r=l area=3.1416h=2 vol=6.2832注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序文件testl_3.cpp清单如下:#include const double pi=3.1416; class circle protected:*public:circle(double r
21、adius) r=radius; void print()area=r*r*pi;cout r= r n n narea=n ared endl;) );class column: protected circle (protected:double h;public:* 3 *void print()( * 4 *);void main() (column col(l.0,2.0);Col.print(); )49.使用VC6打开考生文件夹下的工程test40_3o此工程包含一个 test40_3.cpp,其中定义了类CVector,但该类的定义并不完整。请按要 求完成下列操作,将程序补充完
22、整。完成类CVector构造函数的定义,把传入的int型参数a和b分别赋 值给类的成员变量x和yo请在注释“*1*”之后添加适当的语句。完成类CVector的运算符重载函数的定义,使Cvector类的两个对 象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请 在注释“*2*,之后添加适当的语句。在主函数中添加适当的语句,把类Cvector的对象a和b相力口,并且 把结果保存在对象c中,最后以“x, y”的形式输出在屏幕上,请在注释 “*3*,之后添加适当的语句。源程序文件test40_3.cpp清单如下:#include class CVector public:int
23、x,y;CVector () ;CVector (int,int);CVector operator + (CVector););CVector: :CVector (int a, int b)*)CVector CVector: :operator+ (CVector param)*2*temp.y = y + param.y;return (temp);int main ()CVector a (3,1);CVector b (1,2);CVector c;return 0;)参考答案l.C解析:在面向对象的程序设计中,对象是面向对象的软件的基本模 块,它是由数据及可以对这些数据施加的操作
24、所组成的统一体,而且对 象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无 关的操作。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,9 .算法的有穷性是指A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的C.算法程序的长度是有限的D.算法只能被有限的用户使用10 .对虚函数的调用()。A.一定使用动态联编B.必须使用动态联编C.一定使用静态联编D.不一定使用动态联编二、单选题(13题)11 .下列对重载函数的描述中,错误的是()。A.A.重载函数中不允许使用默认参数B.重载函数中编译是根据参数表进行选择的C.不要使用重载函数来描述毫不相干的函数D.构造函数重载
25、将会给初始化带来多种方式12 .派生类对象对其基类中的什么成员是可访问的?()A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.保护继承的保护成员 内聚性强。由于完成对象功能所需要的元素(数据和方法)基本上都被封 装在对象内部,它与外界的联系自然就比较少,所以,对象之间的耦合 通常比较松。所以,选项A与B错误,选项C正确。2.B3 .DD。【解析】本题考查C+ +语言中操作符重载的概念。运算符重载 的关键字是operator。运算符重载的规则是重载时不能改变运算符的操 作数个数,不能改变运算符的优先级,不能改变运算符的结合性,不能 改变对预定义类型数据的操作方式。4 .A解
26、析:提取函数get()能够提取空白字符,可以带参数,用以存储从 流中得到的字符,返回值为所提取的字符。5 .A6 .A解析:由于数据的集成性使得数据可为多个应用所共享,特别是在网 络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数 据的共享本身又可极大地减少数据冗余性,不仅减少了不必要的存储 空间,更为重要的是可以避免数据的不一致性。因此,数据库设计的 根本目标是要解决数据共享问题。7 .C8 .D解析:本题主要考查Ct+语言的基本语法,选项A中应该为m n|m n :选项B中default语句可有可无;选项C中订可以单独作为一 条语句,不必须和else搭配。9 .A算法的有穷性,是
27、指算法必须能在有限的时间内做完,即算法必须能 在执行有限个步骤之后终止。10 .D解析:虚函数在运行阶段和类的对象绑定在一起,这样成为动态联 编。虚函数声明只能出现在类声明的虚函数原型中,而不能在成员的函 数体实现时。必须由成员函数来调用成员函数来调用或者通过指针、引 用来访问虚函数。如果通过对象名来访问虚函数,则联编在编译过程中 认为是静态联编。11 .AAo【解析】选项A中,重载函数中是允许使用默认参数的;为了使 重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函 数中编译是根据参数表进行选择的,包括参数的个数和类型。12 .D 13.C 本题主要考查了对象数组、指针数组和new
28、运算符。new运算符返回 指向指定类型的一个指针。对象数组是指数组元素为对象的数组,该 数组中的每一个元素都是同一个类的对象。定义对象数组时,系统将 自动调用构造函数创建每一个对象元素,因为类MyClass中定义了一 个有一个整型参数的构造函数,编译器将不再为其生成缺省构造函 数,所以定义对象数组时必须分别调用有参构造函数为每一个数组元 素指定初始值。因此选项A错误,没有初始化对象数组;选项B中,用 指向对象的指针初始化对象数组,类型不匹配,因此选项B错误;指针 数组是由指针组成的数组,即数组中的每一个元素都是指向同一类型 对象的指针。选项C定义了指向MyClass类对象的指针数组x3,该定
29、义语句正确;选项D中,只能用指向MyClass类对象的指针或用已有的MyClass类对象的地址来初始化指针数组x4的每一个元素,不能用对 象进行初始化,因此选项D错误。14.A解析:continue是跳出了本次循环中尚未执行的语句,重新执行循 环,但没有终止循环。注意:注意break, continue和goto语句的用法 和区别。15.B解析:此题为数据库的基本概念,可以对照办工软件的电子表格进 行如下理解:选择:我们根据某条件选择出一行或多行元组(一个元组即 为二维表中的一行)。投影:按字段(也称属性,比如学生关系(学号,姓 名,出生年月,性别),学号、姓名都是属性)选取一列或多列(一个二
30、 维表中所有元组在某一列或几列上截取出来)。连接:2个或2个以上的 表连接组成一张新的表,通常有条件连接。比如学生关系(学号,姓名, 系号),又有一张系表(系号,系名,主任),2张表可以合并为一张这样 的表(学号,姓名,系号,系名,主任)。16.D本题考查的知识点是:类的构造。建立一个类的对象时,构造函数的 执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序 (自左向右);执行成员对象的构造函数,调用顺序按照各个成员对象在类中声明 的顺序(自上而下):(如果一行声明了多个对象,则还要遵循自左向右) 执行自身的构造函数。本题Derived类继承于Base类,所以首先会构造基
31、类Base,但Derived类的构造函数没有初始化列表,所以将调用Base类的默认构 造函数,输出一个0。接下来由于它的成员中还定义了一个Base类的 对象,而构造函数也没有显示初始化这个对象,所以再次调用Base类 的默认构造函数输出一个0。最后构造自身,因为主函数中传入了构造 参数1,所以构造自身时输出了一个1。故最终输出结果为001,应该 选择D。17.CCo【解析】E一R(Entity一Relationship)图为实体一联系图,提供了表 示实体型、属性和联系的方法,用来描述现实世界的概念模型。18.A19.D解析:本题考核虚函数的应用。动态联编一直要到程序运行时才能 确定调用哪个函数
32、。虚函数是实现动态联编的必要条件之一。没有虚函 数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件, 才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向 对象的指针或对象引用,或者是由成员函数调用虚函数。20.C21.A解析:在默认情况下,与ifstream流对象关联的文件将以in模式打 开,该模式允许文件进行读操作;与。fstream关联的文件则以。ut模 式打开,使文件可写。22.CC。【解析】保护继承时,类成员的访问级别只能是降低为保护模式, 因此即使基类的公有成员,也被缩小为保护模式。23.D冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将
33、小 数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个 数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数 放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大 数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从 第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得 第1个数不再小于第2个数),将小数放前,大数放后,一直比较到 倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在 倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大 的数)。如此下去,重复以上过程,直至最终完成排序。24.025 .多继承多继承26 .输出结果输出结
34、果27 .机器机器28 .存储存储解析:数据的逻辑结构是从逻辑关系上描述数据,它与数 据的存储结构无关。29 .存储存储解析:数据结构包括逻辑结构和物理结构(存储结构),逻辑 结构包括集合、线性、树、网络等,而存储结构主要指的是逻辑结构的 存储,包括顺序、链表、索弓I、散列等。30 .析构函数析构函数 解析:C+类对象销毁时,自动执行的函数是析 构函数。31 .数据库管理系统数据库管理系统(DBMS)32 .一对多一对多解析:实体集“项目主管”与实体集项目的联系属于一 对多的联系。33 .A(aa)c(aaq+l) c(aa+l)A(aa)o A(aa), c(aaq+l)或 c(aa+l),
35、 A(aa)o解 析:题中要求用aa初始化基类A,用aa+1初始化类对象成员c,用的 初始化列表的形式,即A(aa), c(aa+l)或c(aa+l), A(aa)o34 .cout endl ; cout =a & & stri=a)”语句是 判断字符stri是否为小写字符,而现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所以修改为“if(stri=a& &stri=z),o37 .(1)应改为“TC :TC”。n(2)应改为voidTC : display”。n(3)应改为 “TC :TC”。n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名 和作用域运算符“:”
36、,作用域运算符用采表示某个成员属于哪个类,使 用格式为“(类名):(成员函数(参数函数),因此第1处应改为“TC :TC”,默认构造函数没有参数。由第2处“TC :display”后的语句看,这 是在类外实现TC函数,因此也有作用域运算符使用错误问题,display 函数返回值为void,因此第2处的语句应改为“voidTC : display。由第 3处的语句叮(2:丁小可知,显然这里是在类外实现析构函数,析构函 数是一个特殊的函数,它的名称和类名相同,并在前面加“”字符,用 采与构造函数加以区别,因此第3处的语句应改为“TC :TC”。38 .(1)应添加“public :n(2)“int
37、i”应改为“inti(10);n(3)“i+ + ; ”应改为“i-;n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、 保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类 的对象被访问。故应在构造函数前添加“public :,否则该类无法被实例 化。变量的初始化可以通过号,也可以和初始化对象一样添加构造 参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i 每次减1,在i5时循环,故i初始化应为10o若循环中i每次增1,则 循环永远不会退出。39 .(1)应改为usingnamespacestd;。应改为outl. open(l. txt, ios:
38、 binary I ios: app); (3)应改为“outl. put(si);5,o【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std, 对于C+ +中引入标准命名空间的格式,缺少namespace,所以第1处 的语句修改为“usingnamespacestd;第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“outl. open(l. txt, binary I app);语句缺少类ios,即第2处的语句修改为 “outl. open(l. txt, ios: binary I ios: app);第 3 个标识应 该用流成员函数put输
39、出字符,所以第3处的语句修改为 “outl. put(si);”。40 .(1)应改为catch(char*s)”。应改为“cateh(inti)”。(3)应改为catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw,error); ”,其 中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类 型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语 句修改为“catch(char*S)”。第2个标识前的异常抛出语句为44throw(int)0);”,其中的类型为int。对应的异常捕捉语句catch中应 该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配 的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处 的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类 型,那么就用删节号“”表示它可以捕捉任何类型的异常信息,即修 改为“catch()”。41 .(l)“staticintn=O应改为staticintn;。(2