《2023年山东省聊城市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2023年山东省聊城市全国计算机等级考试C++语言程序设计真题(含答案).docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年山东省聊城市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列描述中错误的是()。A.继承分为多重继承和单继承B.对象间通信靠传递消息实现C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征D.类是具有共同属性、共同方法的对象的集合2 .下面叙述正确的是 oA.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.以上三种描述都不对3.下述关于数据库系统的叙述中,正确的是()。A.数据库系统减少了数据冗余B.数据库系统避免了
2、一切冗余C.数据库系统中数据的一致性是指数据类型一致data=k ;cout Constructor for container endl ; container:contained) cout Destructor for container endl ; void main() container anObj(5, 6, 10) ; )35 .流操作子可跳过输入流中的前导空白字符。四、程序改错题(10题)36 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有 错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行 的任何异常。程序异常,输出信息为
3、error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *error*的下面。试题程序:#includeiostream, h) intmaintrythrow(error);)/ / *error*catch(chars)(coutsendl;)try(throw(int)0);)/ / *error* catch(coutiendl; try throw(0);throw(error);/ / *error* catch(cout/zERRORz/endl;)returnO;37 .使用VC + + 6.0打开考生文件夹下的源程序文件
4、1 . cpp,该程序运行时有错,请改正 其中的错误,使程序正常运行,输出的结果为 Constructor, i=0,Destructor 注意:错误的语句在/ / *errc)r*的下面,修改该语句即可。 试题程序:#include(iostream . h) classTC ( inti ; public :TC ; voiddisplay ; TC ; );I/ *errc)r*TC : TC ( coutConstructorJ ; i=0 ; )/ / *error*TC : display touti=i, endl ; )I / *errc)r*TC : TCCOUIDestru
5、ctorendl : )voidmainTCa ; a . display ; 38 .使用VC+6. 0打开考生文件夹下的源程序文件1.epp,该程序运行时有 错,请改正其中的错误,使程序正常运行,输出的结果为 Constructor, i=0, Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。 试题程序: ftinclude(iostream. h) classTC inti;public:TC;voiddisplay;TC;;/ / *error*TC: TC cout Z/Cons true tor/z,z, i=0; / / *error*TC:
6、display tout/i=/i/, /zendl; / / *error*TC: TCCOUI/zDestructor/zendl : voidmainTCa;a.display;39 .使用VC+6. 0打开考生文件夹下的源程序文件L cpp,该程序运行时有 错。请改正程序中的错误,使程序输出的结果为 100 37 32注意:错误的语句在/ / *error*的下面,修改该语句即可。 试题程序: #include/ / *error* voidmain/ / *eirc)r* intm=0142:/ / *error* intn=0X27:intq=32;coutmendl; cout
7、n endl ; cout q endl; return;40 .使用VC + + 6.。打开考生文件夹下的源程序文件1 .cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入 一个字符串,并将结果保存到文件1 . txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在| / *arrcr*的下Wf 斗试题程序:#include#include/ / *error*usingstd ;voidWriteFile(char*s)(ofstreamoutl ;/ / *error*outl . open(l txt, binary|a
8、pp);for(inti=0 ; si!=0 ; i + +)(I I *error*outl . puts(si);)outl . close ; ) voidClearFile ofstreamoutl ;outl . open(l . txt);outl . close ;)intmainchars1024;ClearFile ;coutpleaseinputastrin9 : endl ;cin . getline(s, 1024);WriteFile(s);returnO ;)41.使用VC + 4-6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错,请改正 其中
9、的错误,使程序正常运行,并使程序输出的结果为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *arcr*、*的下 .不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain ()(char*sl=abc:I I *error*assert(sizeof(sl)=3):coutsizeof(sl)=5endl ;chars210=ab:I I *error*assert(si
10、zeof(s2)=2);coutsizeof(s2)=10endl ;chars3=23 :assert(sizeof(s3)=4);coutsizeof(s3)=lendl ; return ;)42.使用VC+6. 0打开考生文件夹下的源程序文件1. cpp。本程序要求输入 一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输 入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *error*的下面。试题程序:#include voidmain(inti=0;charstr120
11、;coutz/Enterastringendwith?. /zendl;/ / *error* cin. getline(str, 120);/ / *error* while (str)/ / *error* if(stri)=a)str i=str i-a+A;i + + ;)coutstrendl; return;)43.使用VC+6. 0打开考生文件夹下的源程序文件L cpp,该程序运行时有 错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行 的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,
12、错误 的语句在/ / *errc)r*的下面。试题程序:#includeiostream, h)intmain trythrow (error);)/ / *error* catch(chars)coutsendl;try(throw(int)0);)/ / *error* catch(coutiendl;try(throw(0);throw(error);)/ / *error* catch(cout/ERROR/zendl;)returnO;)44 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能 为从键盘输入一个字
13、符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误 的语句在/ / *error*的下面。试题程序:#include#include/ / *error* usingstd;voidWriteFile (charts) ofstreamoutl;/ / *error*outl. open (/zl. txt, binary | app);for (inti=0; s i !=0; i + +)/ / *error*outl. puts(si);outl. close;)voidClearFile(ofstreamoutl;outl.
14、open(/zl. txt);outl. close;)intmain(chars1024;ClearFile;cout,zpleaseinputastrin9: endl;cin. getline(s, 1024);WriteFile(s);returnO;45 .使用VC + + 6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行有问题,请改正 main函数中的错误,使程序的输出结果为:number=lnumber = 10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/I *error*的下试题程序:#includecl
15、assTC public :TC(inti)(number=i ;)voidSetNumber(intm)(number=m ;intGetNumberconst(returnnumber ;voidPrintconst(coutnumber=numberendl ;)private :intnumber ;);voidmain(/ / *error*TCobjl ;objl . Print ;TCobj2(3);/ / *error*objl . number=10 ;I I *errc)r*%o*TC . SetNumber(lOO);objl . Print ;obj2 . Print
16、; )五、综合应用题(2题)46 .请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其 中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成 员函数Operator、,以实现深层复制。要求:补充编制的内 容写在 “/*333*“与”/*666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件out. dat中。输出函数writeToFile已经编 译为。bj文件,并且在本程序中调用。/CDeepCopy. hftinclude #include using namespace std; class CDeepCopypublic
17、:int n; 动态数组的元素个数 int *p; /动态数组首地址 CDeepCopy(int); CDeepCopy;CDeepCopy&operator= (const CDeepCopy&r); 赋值运算符函数 ;void writeToFile(char); /main, cpp ftincludev CDeepCopy. hCDeepCopy: : CDeepCopydeleteP; CDeepCopy: : CDeepCopy (int k) n=k; p=new int n ; 构造函数实现CDeepCopy&CDeepCopy: : Operator= (const CDee
18、pCopy&r) 赋值运算符函数实 现/不不不不不不不不不不不力力力不不不不不不不不不/*666* int main (CDeepCopy a (2), d(3);a. p0=l; d. p0=666; 对象a, d数组元素的赋值 (CDeepCopy b (3); 调用赋值运算符函数a. p0=88; b=a;coutb. p0; 显示内层局部对象的数组元素)coutd. p0; 显示d数组元素a. p0的值cout n a m b;为了分别将10和20分别赋给n和m, look赋给a, t赋给b,则正确的输入为A.10 look 20 t B.10 look 10C.10 look 20
19、tD.10 look20 t 5.下列选项中不属于结构化程序设计方法的是()。A.自顶向下B.逐步求精C模块化D.可复用6,执行语句序列:int n ; cin n ; switch(n) case 1 : case 2 : cout T ; case 3 : case 4 :cout 2 ;break ; default :cout 3 ; 时,若从键盘输入1,则屏幕显示 OA.l B.2C.3 D.127 .在按层次遍历二叉树的算法中,需要借助的辅助数据结构是()。A.有序表B.线性表C.栈D.队列8 .两个或两个以上模块之间联系的紧密程度称为()。A.耦合性B.内聚性C复杂性D.数据传输
20、特性9 .下面的描述中,正确的是( 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成类的构造函数功能,请在注释1后添加适当的语句。完成构造函数对姓名的赋值,请在注释2后添加适当的语句。定义类的友元函数fun,请在注释3后添加适当的语句。补充函数fun的年龄比较功能,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序 代码。试题程序:#includeclassPeople public:/i/ ZT% rsI XTSTsinti;for (i=0; sUserNamei !=0; i + +) m_UserName i=sUserN
21、ame i; )/sxz sxzsAz J slz sazslz/ 不不不不不不不不乙不不不不不不不不m_01d=n01d; private:charm_UserName32; intmOld; voidfun (charts, People&personl, People&person2 I I *4* iffor (inti=0; personl. m_UserNamei !=0; i + ) (si=personl. m_UserNamei;si + l=0;)else for (inti=0; person2. m_UserNamei !=0; i + )si=person2. m_U
22、serNamei; si + l=O; voidmain(chars32;Peoplepl(abc”, 20);Peoplep2(def”, 30): fun(S, pl, p2); coutsendl: return;六、3,综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj%此工程包含一个源程序文件MyMain9.cpp。 程序中定义了两个类Point和Circle,但类的定义并不完整。请按要求完成下列操作,将类Sample的定义补充完成:类Circle是基类Point公有派生宋的。请在注释“* *1* *”之后添加适当的语句。完成构造函数Circle(int a.int
23、 b.int c)的定义,采用初始化列表的方式使基类Point私有成 员x、y分别初始化为a、b,类Circle的私有成员r初始化为c。请在注释“*2*”之后 添加适当的语句。完成类Circle的成员函数area。的类体外的定义。函数area的功能是计算出此圆对象的面 积,即Pl*r*r。请在注释“*3*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMain9.cpp清单如下:/MyMain9,cpp#include using namespace std;#define PI 3.14 class Point(private:int x, y
24、;public:Point (int a, int b) y=b;)int getx ()return x;)int gety() return y ;);/* *1* * private : int r ; public : /* *2* * int getr() ( return r ;) double area(); );double Circle : area()/* *3* *) int main() Circle cl(5, 7, 10); cout cl.area() endl ; return 0 ; 49.使用VC6打开考生文件夹下的工程test20_3,此工程包含一个源程序
25、文件tes00_3.cpp, 其中定义了用于表示复数的类comp,但类comp的定义并不完整。请按要求完成下列操作, 将类comp的定义补充完整。定义comp的构造函数,函数含参数x和y,它们都是in,型的数据,默认值都为0,请 使用参数列表的形式分别将类数据成员a和b初始化x和y的值。请在注释7/f 之后 添加适当的语句。(2)完成类comp的成员函数input(int x,int y)的定义,将int型的参数x和y分别赋值给数据 成员s和b,请在注释“182之后添加适当的语句;完成类comp的友元函数friend compplus(comp &x,comp &y)的定义,该函数首先要定义
26、一个comp类的对象c,然后将参数x和v的数据成员a与b分别相加并分别赋值给c的成 员a和b,最后返回c的值,请在注释7/*3*”之后添加适当的语句。输出结果如下: 10+20i2+3iresult : 12+23i注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test20_3.cpp清单如下:#include class compint a;int b;public:/*friend comp plus(comp &x, comp &y);void input(int x,int y)/*2*void output ()(cout a b i endl;);comp
27、plus(comp &x, comp &y)(c.b = x.b+y.b;return c;)void main()(comp x(10,20),y,z;y.input(2,3);z = plus(xy);x.output();y.output();cout result:;乙 output。;)-4-X -+ A/r r-? 参考合案LC解析:对象的封装性是指从外面看只能看到对象的外部特性.而对象的内部,其处理能 力的实行和内部状态对外是不可见的,是隐蔽的。2c解析:算法的执行效率与数据的逻辑结构和存储结构都有很紧密的关系。算法的空间复 杂度是指执行该算法需要的内存空间,并非算法程序中指令的
28、条数。算法一般应该具有以下 4个特征:可行性、确定性、有穷性和拥有足够情报。其中,有穷性是指算法必须能在执行 有限个步骤之后终止,否则可能失去实际意义。3 .A解析:数据库是一个通用化的、综合性的数据集合,它可以为各种用户所共享,具有最 小的冗余度和较高的数据与程序的独立性,而且能并发地为多个应用服务,同时具有安全性 和完整性。即数据库系统减少了数据冗余,但不能避免一切冗余。所以选项A正确,选项B 错误。在数据库管理阶段中,数据是结构化的,面向系统,数据冗余度小,从而节省了数据 的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性。数据 的不一致性,是指对数据的存取方式,
29、选项C错误。数据库系统比文件系统能管理更多的 数据,并非是数据库系统的特点,选项D错误。本题正确答案是A。4 .C解析:本题考查C+ +中流操作符的操作规则,即分割符。首先根据字符不需要加引号可 以排除选项A和B,而D用回车作分割符,但却在look和20之间缺少一个回车符,故据此 可选出正确答案为C。5 .D解析:20世纪70年代以来,提出了许多软件设计方法,主要有逐步求精: 对复杂的问题,应设计一些子目标作过渡,逐步细化;自顶向下:程序设计 时应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开 始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化; 模块化:一个
30、复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序 要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标 称为一个模块,而可复用是面向对象程序设计的一个优点。6 .D解析:switch条件选择语句,当运行到符合条件后,若无break,则继续运行下面的语 句。即“easel;”符合条件,执行了 “cout I1;又执行了 “cout n|j nin;选项B中 default语句可有可无;选项(:中if可以单独作为一条语句,不是必须和 else搭配。21.BBo【解析】本题考查运算符的重载。假定已经作为某个类的成员函数重载了二 元运算符+,且cl、c2都是该类的对象,则“cl
31、operator+(c2) ”,与“cl+c2”含义相同。如果+作为该类的非成员函数重载,则“operator+(cl, c2)与cl+c2”含义相同。同理,运算符“ / ”作为友元函数重载,则“(一x) /y”与表达式operator / (x), y) ”相同。前缀运算符“一”作 为友元函数重载,则“一X与operator(x)”相同,所以组合起来是u Operator / (operator一(x), y); ”,即 B 选项。22.A解析:C+语言标识符只能由数字,字母和下划线组成,并且只能以字母和下划线为 开头。23.DDo【解析】本题考查的是友元类的定义:类A为类B的友元类,则类A
32、的所有 成员函数都是类B的友元函数,但反之则不一定成立。24.25.队尾队尾26.类类 解析:在C+ +的面向对象程序设计框架中,类是程序的基本组成单元,程序的主体 通常由若干类的定义构成。27,1 2 3 4 51 2 3 4 5解析:本题考查的是考生使用简单循环输出数组元素的能力,因为结 束条件是ifO;n,输出 AA 和 CC。3O.new node(itop)new node(i, top)解析:本题考核友元类以及对象成员的应用,属于综合 考题。本程序中定义了两个类node和stack,用于实现堆栈的压入和弹出操作。其中,类 stack是类node的友元类,这样类stack中的成员可以
33、访问类node中的所有成员。在类 node中,定义两个私有变量:整型变量data和对象指针prevo变量data用于保存节点的 数值,而对象指针prey用于指向上一节点。在类node的构造函数中,形参是数据d和对 象指针n。在类stack中,定义了一个私有变量,栈顶指针top,并在构造函数中赋值。(即 指针为空)。函数push()实现入栈操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这 个节点的prev指针指向栈顶,即topo然后让top指针指向新的节点。所以在push()函数中 应填入“node*n=new node(i, top)”。类stack中的pop()函数实现数据的弹
34、出功能。先定 义了一个对象指针t指向栈顶节点。然后判断堆栈是否为空,如果为空,则返回0,否则就 弹出栈顶节点的值。那么应该先将栈顶指针后退一个节点,然后把对象t指针指向的节点值 弹出,并删除节点t。31.732.A()A()解析:此题考查的是类的构造与析构。本题要求输出的结果中包含aa,所以 基类A中横线处的函数一定要被执行。横线处应是定义基类的构造或者析构函数,如果定 义的是构造,那么aa肯定在new操作时就输出,而下面的bb是在析构函数中,会在delete 时被输出。故可以肯定应填入基类A的析构函数定义A()。33.1934.Constructor for object6 Construc
35、tor for obiect5 Constructor for container Destructor for container Destructor for objects Destructor for obiect6Constructor for object6rnConstructor for obiect5rnConstructor for containerrnDestructor for containerrnDestructor for object5rnDestructor for obiect6解析:C+语言中的构造函数和析构函数分别是在声明对 象时和对象调用完毕后调用,
36、本题中的调用就是这样成对出现的。35.ws36 . (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子句中的类型,否
37、则如果找不到匹配的catch块,系统就会调用一个 系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在 catch子句中没有指定异常信息的类型,那么就用删节号表示它可以捕 捉任何类型的异常信息,即修改为“catch()”。37 .应改为“TC : : TC” on应改为 uvoidTC : : display。n应改为“TC :TC” on【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“ 作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名):成员函数(参数函 数),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC : display 后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数 返回值为void,因此第2处的语句应改为uvoidTC : display。由