《2022年安徽省合肥市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2022年安徽省合肥市全国计算机等级考试C++语言程序设计真题(含答案).docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年安徽省合肥市全国计算机等级考试 C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .线性表是一个具有n个()的有限序列。A.表元素B.数据元素C.字符D.数据项2 .下述关于数据库系统的叙述中,正确的是()。A.数据库系统减少了数据冗余B.数据库系统避免了一切冗余C.数据库系统中数据的一致性是指数据类型一致D.数据库系统比文件系统能管理更多的数据3 .关于静态数据成员的描述中正确的是()。A.类的静态数据成员不是类的所有对象共享的数据B.类的静态数据成员不能被类的成员函数调用C.类的静态数据成员不能被类的构造函数调用D.类的静态数据成员必须进行初始化4
2、 .下面运算符不能被友元函数重载的是()。A.+ B.= C.*D. throw (error);/ / *error* catch(chars)coutsendl;)trythrow(int)0);/ / *error* catchcoutiendl;try(throw(0);throw (error);/ / *error* catchcout,zERROR/zendl;returnO;39 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有 错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行 的任何异常。程序异常,输出信息为error0ER
3、ROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *error*的下面。试题程序:#includeiostream, h) intmaintry(throw(error);)/ / *error*catch(chars)(coutsendl;try(throw(int)0);/ / *eiror* catchcoutiendl;)trythrow (0);throw(error);/ / *eiror* catch(coutz/ERR0Rz/endl ;)returnO; 40 .使用VC + +6 . 0打开考生文件夹下的源程序文件1 .cpp,
4、该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入 一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在 / / *error*的 下面。试题程序:#include#include/ / *error*usingstd ;voidWriteFile(char*s)ofstreamoutl ; / / *error* outl . open(l . txt, binary|app); for(inti=0 ; si!=0 ; i + +) ( I I *error* outl . puts(si); )
5、 outl . close ; ) voidClearFile ( ofstreamoutl ; outl . open(l . txt); outl . close ; ) intmain ( chars1024; ClearFile ; coutpleaseinputastrin9 : endl ; cin . getline(s, 1024); WriteFile(s); returnO ; )41.使用VC + + 6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错,请改正 其中的错误,使程序正常运行,输出的结果为 Constructor, i=0, Destruc
6、tor 注意:错误的语句在/ /*error*的下面,修改该语句即可。 试题程序: #include(iostream . h) classTC ( inti ; public : TC ; voiddisplay ; TC ; ); / / *error*TC : TCcoutConstructor,;i=0;)/ / *errc)r*TC : display(touti=i, endl ;)/ / *errc)r*TC : TC(COUIDestructorclassCO(public:/ *error* /staticintn=O:CO(n+ + :CO/ *error* /intCO:
7、 : n;voidmainCOobj;COobj27;COM=NULL: c=&obj: / *error* / eoutC, nendl; coutC0: : nclassTC / *error* /TC(inti)(mj=i ;)voidprint(cout-m_i5)I *errOr* /04 . print ; )coutendl ;returnO ;)44 .使用VC+6. 0打开考生文件夹下的源程序文件1. cppo本程序要求输入 一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输 入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函
8、数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *errc)r*的下面。试题程序:#include voidmain(inti=0;charstr120;coutz,Enterastringendwith?. /zendl;/ / *error*cin. getline(str, 120);/ / *error*while (str)(/ / *error*if(stri)=a)str i=str i-a+A; i + + ;)coutstrendl;return;45 .使用VC + + 6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行有问题,请改正 mai
9、n函数中的错误,使程序的输出结果为: number=lnumber = 10number = 100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#includeclassTC public :TC(inti)(number二i ;)voidSetNumber(intm)(number二m ;)intGetNumberconst(returnnumber ;voidPrintconst(coutnumber=number classTCFruit private:floatWeight; / |/XjX XJX XjX
10、 XjX XJX ZJX I zjx xjx xjx xjx XJX xjsstaticintAHNo; public:TCFruit(floatw) ( /six six six ) six six *Jx/ 不不不不不不不不乙不不不不不不不不AllWeight + =w:Al lNo+ + : TCFruit /*X* *A* *A* *A* *1* J/ 不不不不不不不不力不不不不不不不不AllWeight-二Weight: voiddisplay (coutz/SellaFruitwith,Weight/,k9/ endl;coutv Allsellnumber: /zAllNoend
11、l; coutz/Allsellweight: ,/AllWeight/,k9, endlendl;I I *4* floatTCFruit: : AllWeight=O. 0; intmainTCFruitFruitl (1. 2);Fruitl. display;TCFruitFruit2(2. 3);Fruit2. display;returnO; 47.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其 中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个 整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,
12、这 些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将 一个元素添加到集合中(如果集合中不存在该元素),成员函数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*”之间
13、,不得修改程序的其他部分。注意:程序最后将结果输出到文件out. dat中。输出函数writeToFile已经编 译为。bj文件,并且在本程序中调用。/IntegorSet. hftifndef INTEGERSETdefine INTEGERSET#include using namespace std;const int MAXELEMENTS=100;集合最多可拥有的元素个数class IntegerSet int elemMAXELEMENTS;用于存放集合元素的数组int counter; 用于记录集合中元素个数的计数器public:IntegerSet: counter(0) 创建
14、一个空集合IntegerSet(int data, int size);利用数组提供的数据创建一个整数集合void add(int element);添加一个元素到集合中void remeve(int element);删除集合中指定的元素int getCountconstreturn counter; 返回集合中元素的个数int getElement (int i) const return elemi ; 返回集合中指定的元素 void showconst;;void WriteToFile(char*);ttendif/main, cppftincludev IntegerSet. h#
15、includeIntegerSet: : IntegerSet (int data口,int size): counter (0) for(int i=0; i0; j-)if (element=elemj 一 11)break;如果找到的是等于element的元素,说明要添加的元素已经存在,直接返回 if(j0)if (element=elemj-1) return;如果找到的是小于element的元素,j就是要添加的位置该元素及其后面的元素依次后移,腾出插入位置for(intkcounter; kj; k-)elemk=elemk 一 1;elemj=elenient; /将 elemen
16、t 插入到该位置counter+; 计数器加1)void IntegerSet: : remove(int element)/ /不不不不不不不不不不不不不不不力JJ不不不不不不不不不不不不不不不 / /vt*/ XjX Tx xtx xTx xTx xjx ztxTx xtx xjx xtx xlx Z7X xTx 1 I 1 I 1 ztx X7X xtx xjx zTx ztx xjx xTx XjX ZTX Z7X X7Xvoid IntegerSet: : showconstfor(int i=0; igetCount; i+)coutsetw(4)getElement(i);cou
17、tendl:int mainint d二5, 28, 2, 4, 5, 3, 2, 75, 27, 66, 31);IntegerSet S(d, 11); S. show;S. add(6); s. show;S. add(19); S. show;S remove(2); s. show;S. add(4); S. show;writeToFile( );5.下列对派生类的表述中,错误的是()。A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的缺省继承方式是privateD.派生类只继承了基类的公有成员和保护成员6 .下列关于结构化程序设计原则和方法的描述中,错误
18、的是()。A.选用的结构只准许有一个入口和一个出口B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C.不允许使用GOTO语句D.语言中所没有的控制结构,应该采用前后一致的方法来模拟7 .以下叙述中正确的是A.构成C+语言程序的基本单位是类8 .可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.所有被调用的函数一定要在调用之前进行定义8 .下列特征中不是面向对象方法的主要特征的是()。A.多态性B.继承C.封装性D.模块化9 .如果表达式-X+y中,-是作为成员函数重载的,+是作为成员函数重载的,则该表达式还可为return 0; 六、3.综合应用题(2题)48.使
19、用VC6打开考生文件夹下的工程testl9_3,此工程包含一个源程序文件testl9_3.cpp, 其中定义了用于表示向量的类vector,但类vector的定义并不完整。请按要求完成下列操 作,将类vector的定义补充完整。补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为0。 请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。请在注 释“火火1*”之后添加适当的语句。完成类vector的成员函数input(intxjnty)的定义,将int型的参数x和y分别赋值给数据 成员a和b,请在注释7/*2之后添加适当的语句。完成类 vect
20、or 的友元函数 friend double Multiply (vector &x,vector &y)的定义,先定义 double型的临时变量c,然后将参数对象x和对象y的数据成员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)(/*2*void output ()(
21、cout ( a ; b endl;friend double Multiply(vector &x,vector &y);double Multiply (vector &x,vector &y)(/*3*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 endl;)49.使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义 了表示栈
22、的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补 充完整。定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放 栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释7/*1*”之后添 加适当的语句。完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组, 并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值 为-l(size等于-1表示栈为空)。请在注释7/*2*了之后添加适当的语句。完成类stack的成员函数push的定义。该函数将传入的整型
23、参数x压入栈中,即在size 小于数组的最大下标情况下,size自加L再给x赋值。请在注释“*3*”之后添加适当 的语句。完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的 情况下,返回数组中下标为size的元素的值,并将size减1。请在注释7/*4*”之后添加 适当的语句。程序输出结果如下:the top elem : 1the pop elem : 1the stack is empty注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test34_3.cpp清单如下:#include class stack(/* 1 *publ
24、ic:stack ();bool empty()return size= = -l;bool full() return size二二99;void push(int x);void pop();void top(););stack:stack() 11 * 2 *for(int i=0; i 100; i +)*(sp+i)= 0;size=-l;)void stack:push(int x)(/* 3 *cout the stack is full endl;else(size+;*(sp+size)= x;)void stack:pop()(/* 4 *cout the stack is
25、 empty endl;else(cout the pop elem: *(sp+size) endl; size-;)void stack:top()(if iempty()cout the stack is empty endl;else(cout the top elem: *(sp+size) ”和“ ”都是属于有格式的输入输出。注 意:使用cin, cout进行输入输出时应包括头文件iostream.h。35 .x=y-236 .(1)应改为 “ein . getline(str, 120, ?) ; n。n应改为 4=a& &stri快)”语句是判断字符stri 是否为小写字符,而
26、现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所 以修改为 uif(stri=a& &stri=z) o37 .应改为TCobjl;”。(2)应改为 “ObjL SetNumber(lO);应改为 “0bj2. SelNumber(lOO); 。【解析】本题第1处的“TCobjl; ”语句是声明TC类的对象Objl,根据TC类 构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两 L所以补全参数1,即第1处的“TCobjl(l); 。第2处处的“objl. number=10; ”应该是调用成员函数SetNumber赋值。在C+ +中成员 函数的使用形式应该
27、是:对象名.成员函数,所以修改为objl. SetNumber(lO); o类是对象的抽象,而对象是类的具体实例。第3 处“TC. SetNumber(lOO); ”语句中的TC为类,并不是对象,这里应该使用定 义的对象,即obj2,所以将语句修改为“obj2. SetNumber (100) ; vo38 .应改为 “catch (char*s)” (2)应改为 cateh(inti)”。应改为“catch。【解析】本题中第1个标识前的异常抛出语句为“throw(error); ”,其中 的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程 序中给出的语句catch(ch
28、ars)是字符型的,所以第1处的语句修改为“catch (char*S) ”。第2个标识前的异常抛出语句为uthrow(int) 0) ; v , 其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补 充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个 系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在 catch子句中没有指定异常信息的类型,那么就用删节号表示它可以捕 捉任何类型的异常信息,即修改为“catch()”。39 . (1)应改为 catch(char*s) ”。(2)应改为 cateh(inti) ”。(3)应改为 catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw(error); ,其中 的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程 序中给出的语句catch(chars)是字符型的,所以第1处的语句修改为“catch(char*S) ”。第2个标识前的异常抛出语句为“throw(int) 0);”, 其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补 充catch子句中的类型,否则如果找不