《2023年甘肃省庆阳市全国计算机等级考试C++语言程序设计真题(含答案).docx》由会员分享,可在线阅读,更多相关《2023年甘肃省庆阳市全国计算机等级考试C++语言程序设计真题(含答案).docx(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023年甘肃省庆阳市全国计算机等级考试C+语言程序设计真题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列叙述中正确的是()oA.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D.循环队列中元素的个数是由队头指针和队尾指针共同决定的2 .下列能对对象进行初始化的是()。A.构造函数B.析构函数C.友元函数D.静态成员函数3 .设有定义nit a :float f; double int i,则表达式10+a+i+f值的数据类型是()A.
2、int B.float C.double D.不确定4 .下列程序的运行结果为()。#include void main() int a=2 ; int b=a+1 ; cou afo endl ; A.0.66667 B.O C.0.7 D.0.66666666 5.下面的语句中错误的是()。A.int a=5 : int xa;private :int n ;);int f() (MyClass * ptr=new MyClass(45);)35 .多态性分为两类:编译时的多态性和【】。四、程序改错题(10题)36 .使用VC + +6. 0打开考生文件夹下的源程序文件1. cpp,该程序
3、 运行时有错误,请改正错误,使程序正常运行,并且要求最后一个 catch必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#includekIvt ! vt, 7* ,Tcatch(chars)(coutsendl;throw(int)0);sl1个个个个个个个个个个个个个个个个catch(coutiendl;) try(throw(O);throw。error”);)/r*的下面。试题程序:#include voidmain inti=O ;charst
4、r120;coutHEnterastringendwith?nendl ;个个个小小小个个nor个个个不个个个个cin. getline(str, 120);while(str)7,7,个个个个个个个个个个* *个个个个if(stri)=a)stri=stri-a+A;i+ + ;coutstrendl ;return ;38 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error0 ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构
5、,错误的语句在/ / *errc)r*的下面。试题程序:#include classTCvt*vL* vl#kL* vl#个个个干小个个个不个个个个个个小TC(inti)m_i=i ;) voidprint(coutm_i,;)public :intm i ;);intmain(不不不不不不不不error不不不不不不不不inti ;TC04(10);while(i5)(/7 7, 7 77 7 7 7, 7不不不不不不不不m*()r不不不不不不不不i+ + :04 . print ;)coutendl ;returnO ;40 .使用VC + +6. 0打开考生文件夹下的源程序文件1. cpp
6、,该程序运行时有错误,请改正程序中的错误。本程序要求实 现的功能为从键盘输入一个字符串,并将结果保存到文件1. txt中。 注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在*errc)r* 的下面。试题程序:#include#include/ / *error*usingstd;voidWriteFile(char*s) (ofstreamout l ;/ / * error* *utl. open(nl. txt, binary|app); for(inti=0; si!=0; i+) (/ / *error*outl. puts(si);)outl. cl
7、ose;) voidClearFile (ofstreamoutl ;outl. open(nl. txt);outl. close;intmain chars 1024;ClearFile;coutnpleaseinputastrin9 :nendl;cin. getline(s, 1024);WriteFile(s);returnO ;41.使用VC+ +6 . 0打开考生文件夹下的源程序文件1 . cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现 的功能为从键盘输入一个字符串,并将结果保存到文件1 . txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的
8、结 构,错误的语句在*1 *1*error的下面。试题程序:#include#include usingstd ;voidWriteFile(char*s) ofstreamoutl ;7,7,7,k,1 7,7个个个个不不不个个个不不不不个不outl . open(nl . txt, binary|app);for(inti=0 ; si!=0 ; i + +)(/kL* vLvl* L* kL*vL/、不不不不不不不error不不不不不不不不outl . puts(si);)outl . close ;)voidClearFile (ofstreamoutl ;outl . open(nl
9、 .txt”);outl . close ;)intmain (chars 1024;ClearFile ;coutnpleaseinputastrin9 :nendl ;cin . getline(s, 1024);WriteFile(s);returnO ; )42.使用VC + +6.。打开考生文件夹下的源程序文件1. cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *errc)r*的下面,修改该语句即可。试题程序:#include(iostream. h)classTC (inti;
10、public:TC;voiddisplay ;TC;TC: TC coutnConstructornn, i=0;TC: display toutni=ni nendl;个不不不不不en*or不不不不不不B.const int a=5 ; int xa;C.int n=5 ; int*p=new int a;D.const int n=5 : int*p二new inta;6 .下列关于模板形参的描述中,错误的是A.模板形参表必须在关键字template之后B.模板形参表必须用小括号()括起来C.模板形参表必须用小括号()括起来D.可以用typename修饰模板形参7 .下列程序的输出结果是
11、#include int min(int a, int b)if(a b)retum a ; else return b ; return 0 ; void main() cout min(l,min(2, 3) endl ; A.0B.1 C.2 D.38 .软件生命周期是指()。A.软件产品从提出、实现、使用维护到停止使用退役的过程9 .软件产品从提出、实现到使用维护的过程C.软件产品从提出到实现的过程D.软件产品从提出、实现到使用的过程10 下面程序的运行结果是 #includeniostream.hn #define sum(a, b) a*b void main() int x ;
12、x=sum(l+2, 3) ; cout x ; )TC:TCCOUInDestructornendl :) voidmain(TCa;a. display; )43 .使用VC+6. 0打开考生文件夹下的源程序文件L cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include voidmain intm=0142:intq=32;cout mendl;cout n endl ;cout qendl;return ; )44 .使用VC + +6 .0打开考生文件夹下的源程序文件1 .
13、cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5sizeof(s2)=10 sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。不能删除assert ()语句。(2)只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include#includevoidmain () chartsl=abc:vL*个个个个个个个个小小个个个不个不assert(sizeof(s 1 )=3): coutnsizeof(sl)=5ne
14、ndl ;chars210=nabn:assert(sizeof(s2)=2);coutnsizeof(s2)=10nendl ;chars3=23 :*7*不不不不不不不不不不不不不不不assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ;45 .使用VC + +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=l number= 10 number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结 构,错误的语句在/ / *errc)r*
15、的下面。试题程序:#include classTCpublic :TC(inti) number=i ;voidSetNumber(intm) number=m ;intGetNumberconst returnnumber ;voidPrintconst coutHnumber=nnumberendl ;private :intnumber ;voidmain个个个个个个个个nor个个小个个个个个TCobjl ;objl . Print ;TCobj2(3);kI 7,7,7、!个不不不不不不个个个不不不个不不objl . number= 10 ;! 1 *ei*j*0r*o*TC . Se
16、tNumber(lOO); objl . Print ;obj2 . Print ; )五、综合应用题(2题)46 .使用VC+6. 0打开考生文件夹下的源程序文件3. cpp,其中定 义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公 有派生。(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函 数中请将x赋值给数据成员a。请在注释“/ / *1*”之 后添加适当的语句。(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构 造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数 值传人。请在注释“/ / *2*=1s”之后添加适当的语句。定义类A
17、2的构造函数,该构造函数有3个整型的参数x, y和z, 在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1 构造函数的参数x和y。请在注释“/ / *3*”之后添加 适当的语句。(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输 出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值在输出时以空格隔开。请在注释“/ / *4*51c”之后添加适当的语句。程序输出结果如下:73738注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。试题程序:#include classA inta;public:intgetareturna; ;classAl: p
18、ublicA intb;public:/Jintgetbreturnb; ;classA2: publicA 1 intC;public:3“*1 kI kL k! kJ kJ kJ k1rj* rjwvoidshowI I *4* );voidmain(A2a(8. 3. 7):couta . getaendl :couta . getbendl :a. show;47.使用VC + +6. 0打开考生文件夹下的源程序文件3. cpp。请完成 以下部分,实现在屏幕上输出为C3C2这个程序需要修改的部分,请按照以下部分实现。类CO不能被实例化,请定义一个纯虚函数print,在注释1后添加 适当
19、的语句。类C1私有虚继承类CO,请在注释2后添加适当的语句。类C2公有继承于CO,请在注释3后添加适当的语句。(4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修 改其他的程序代码。试题程序:#include(iostream. h) classCO;/ vl* vl* *1* *1* kL* *X* *L* *1*X* k1* *1 vl* vl* k1* *1* *X*/ q、1一 ,F7 q,卜/ ,classCl :(public:voidprint(coutH,Cr, *!7*1 %t 7,kJ/ q. q.4 r
20、j* rj* rTclassC2:(public:voidprintcoutC2 k!k! kJ kJ k1 k! A k! kJ k1 k! k1 k!个个个个个不不个/不不不寸不不*T*个classC3:public: voidprint (coutC3endl;);voidmain (C3Obj3;C20bj2;obj3. print;obj2. print;return ; )六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test34_3o此工程包含一个 test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并 不完整,请按要求完成下列操
21、作,将程序补充完整。定义类stack的私有数据成员sp和size,它们分别为整型的指针和变 量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元 素的下标值。请在注释“*1*”之后添加适当的语句。(2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100 个元素的血型数组,并把该数组的首元素地址赋给指针sp,然后将该 数组的所有元素赋值为0,并将size赋值为/(size等于-1表示栈为空)。 请在注释“*2* ”之后添加适当的语句。完成类stack的成员函数push的定义。该函数将传入的整型参数x压 入栈中,即在size小于数组的最大下标情况下,size自力口1
22、,再给x赋 值。请在注释“*3*之后添加适当的语句。(4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即 在size不等于-1的情况下,返回数组中下标为size的元素的值,并将 size减lo请在注释“*4*”之后添加适当的语句。程序输出结果如下:the top elem : 1the pop elem : 1the stack is empty注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test34_3.cpp清单如下:#include class stack(* *public:stack ();bool empty()return size=
23、l;bool full() return size-99;void push(int x);void pop();void top(););stack: :stack()A.O B.9 C.7 D.5 10.下列语句中不是死循环的是A.int i=10 ;while(l) i ; if (i= =l)break ; B.for(int i=l ; i = 0);D.int i=l ; for ( ; ; )i = i+1 ;二、单选题(13题)11 .以下关键字不能用来声明类的访问权限的是()oA.publiC B.static C. . protected D.private12 .下面不属
24、于同一函数模板的是()。A.template tl max(tl &a9tl &b) .template t2 max(t2 &aJ2 &b) .B. tempi ate tl max(tl a9tl b). template t2 max(t2 &aJ2 &b)C.template tl max(tl * a,tl * b) template t2 max(t2 &aJ2 &b) .D.template tl max(tl a,tl b).template t2 max(t2 &aj2 &b,t2 c).13.设计程序时,应采纳的原则之一是()。A.程序的结构应有助于读者的理解B.限制got
25、o语句的使用C减少或取消注释行D.程序越短越好* 2 * for(int i=0; i 100; i+)*(sp+i)=0;size=-l;)void stack: :push(int x)(* 3 *cout nthe stack is full” endl;else ( size+;*(sp+size) = x;)void stack: :pop()(* 4 *cout nthe stack is emptyn endl;else (cout nthe pop elem:n *(sp+size) endl;size;)void stack: :top()(if iempty()cout n
26、the stack is emptyn endl;else (cout nthe top elem:n *(sp+size) endl;)void main () stack s;s.push(l);s.topO;s.popO;s.topO ; )49.使用VC6打开考生文件夹下的工程testll_3o此工程包含一个 testll_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按 要求完成下列操作,将类CPosition的定义补充完整。在类定义外完成重载的两个构造函数CPosition。和CPosition(double dx, double dy),其中前者为不带参数
27、的构造函数,使CPosition对象的 默认值为x=0, y=0,后者为带参数的构造函数,把数据成员x和y分 别初始化为参数dx和dy的值。请在注释“*1*”之后添加适当的语句。 (2)在类体中添加函数move(doubleax, double ay)的定义,使得点的坐标 x和y分别移动ax和ay个单位,请在注释“ *2*”之后添加适当的语 句。(3)完成函数 double distance (double bx, double by)的定义,该函数返回 *this和点(bx,by)的距离,请在注释“*3*”之后添加适当的语句。注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序
28、文件testll_3.cpp清单如下:#include #include class CPosition (public :CPosition();CPosition(double dx, double dy);double getx();double gety(); * 2 *double distance(double bx, double by);private :double x ;double y ;);II * *(x=0 ; y=0 ;)CPosition : CPosition(double dx, double dy)(x=dx ; y=dy ;double CPositio
29、n : getx()(return x ;)double CPosition : gety()(return y ;)double CPosition : distance(double bx, double by)*3* void main() (double a, b ;cout a b ;CPosition psA(a, b);cout a b ;cout The distance is n psA . distance(a, b) endl ; )参考答案l.D循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的, 所以A错误;在循环队列中只需要队头指针与队尾两个指针来共同反 映队
30、列中元素的动态变化情况,所以B与C错误。2.A类的构造函数的作用就是在类实例化对象时,即对象还没有生成时完 成一些初始化的工作。此时,析构函数和静态成员函数都还没有建 立,而友元函数是类外部的函数,根本无法完成类的实例化工作。3.C4.B5.A解析:在C + +中定义数组时,数组的范围参数在静态定义时必须 是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了 值的参数。故选项A)是错误的定义方法。6.B解析:对函数模板,模板的一般格式为:template 函数类型函数名(形参)函数体对类模板,一般格式为:template class类型参数class类名,类型参数是用一对 括起来。7
31、.B解析:本题考查的是函数的调用,第一次调用min(2, 3),因为2 V 3,所以返回值为2,第二次调用min(l, 2),因为12,所以返回1。8 .A解析:软件生命周期是一个重要概念,考生应很好掌握。它是指软 件产品从提出、实现、使用维护到停止使用退役的整个过程。一般包括 可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。9 .C解析:理解宏定义,sum(a, B a*b中a为1 +2, b为3,故 sum( 1+2,3)= 1+2*3,即宏定义的替换过程是原样替换。注意:选项B的 计算方法是(1+2)*3=9是错误的,注意,不要随意的加括号。注意:宏 定义与函数的区别。1
32、0 .A解析:选项A)中i自减到1时就会执行break语句跳出循环,选项 B)中i 0永远不会跳出循环,选项D)中未给出结束循环的条件。11 .B解析:本题考查了类的访问权限。在C+中,类的访问权限一共有3 种,分别是:u3000public(公有)、protected(保护)和 private(私有)。因 此,本题应该选择B。12.D解析:函数模板的重载是靠模板参数的数量不同来区分的,因为函 数模板是抽象的,有待于进一步实例化,所以靠参数类型无法区别调用 哪个函数模板。13.AAo【解析】程序设计的风格主要强调程序的简单、清晰和可理解性, 以便读者理解。程序滥用got。语句将使程序流程无规律
33、,可读性差; 添加注释行有利于对程序的理解.不应减少或取消,程序的长短要依 据实际的需要而定,并不是越短越好。14.B15.A解析:从工程管理的角度看,软件设计可分为概要设计和详细设计两 大步骤。概要设计是根据需求确定软件和数据的总体框架;详细设计 是将其进一步精化成软件的算法或表示和数据结构。而在技术上,概 要设计和详细设计又由若干活动组成,包括总体结构设计/数据设计和 过程设计。因此,本题的正确答案是A。16.C解析:根据数据结构对栈的定义及其特点可知:栈是限定只在表 尾进行插入或删除操作的线性表,因此栈是先进后出的线性表,对栈的 插入与删除操作,不需要改变栈底元素。栈是限定只在表尾进行插
34、入或 删除操作的线性表。17.B18.AAo【解析】由主函数main入手,定义外部变量x和y,调用函数 addo因为x, y为外部变量,所以“intx(20), y(5);”的赋值在add也是 有效的,即add函数的运算结果为25。19.A解析:本题考查了常对象与常成员函数的概念。使用const关键字修饰 的对象称为常对象,它的特点是不能被更新;使用const关键字声明的 成员函数称为常成员函数,它的特点也是不能更新对象的数据成员。 因为其他成员函数没有这个限制,即可以更新对象的数据成员,所以 通过常对象只能调用常成员函数而不能调用其他成员函数,而且常成 员函数也只能调用常成员函数而不能调用其
35、他成员函数,否则它们的 特性就会被打破。故应该选择A。20.B基类中说明的虚函数,在派生类中自然就是虚函数,对于纯虚函数必 须在后面继承的派生类中给出具体的实现;静态成员函数不能进行动 态联编,所以虚函数不能是静态的。21.A解析:作为一个算法,一般应该具有下列4个特征:(1)可行性, 即考虑到实际的条件能够达到一个满意的结果;(2)确定性,算法中的 每一个步骤都必须是有明确定义的,(3)有穷性,一个算法必须在有限 的时间内做完;(4)拥有足够的情报。22.B解析:数据库设计主要分4个步骤:需求分析、概念结构设计、逻 辑结构设计、物理结构设计。选项B错误,应为本题的正确答案,因为 概念结构设计
36、在需求分析的基础上对客观世界做抽象,独立于数据库的 逻辑结构,也独立于具体的数据库管理系统,与具体的数据库管理系统 无关。23.D解析:本题考查的是引用调用,因为函数swap引用调用参数a, 所以在swap函数中a的变化会改变主函数中a的值,即a自加1,但b 的值并未改变。24.O(n)O(n)解析:语句的频度指的是该语句重复执行的次数。一个算 法中所有语句的频度之和构成了该算法的运行时间。长度为n的线性表 顺序查找的平均次数为n/2,则它的时间复杂度是O(n)。25.算法算法26.逻辑判断逻辑判断解析绘制流程图时对实体的描述用椭圆形表示、 行动方案用矩形表示、问题用菱形表示、箭头代表流动方向
37、。27.44解析:本题主要考察C+中递归函数的调用。递归函数即自调用 函数,在函数体内部直接或间接的自己调用自己,即函数的嵌套调用是 函数本身。递归调用分为直接递归调用和间接递归调用两种形式。本题程序为求解典型递归数列Fibonacci中任意项值的简化程序(主函数 中的调用改成fib(n),即变成求解任意项值)。主函数通过调用的()函数, 如()函数内部再通过一个分支结构判断是否进行递归调用或退出递归 调用,调用方式为直接递归调用。主函数通过实参将值3赋给他()函数的形参n,由于M3满足汀分支语 句条件,因此函数进行递归调用,即计算fib(2)和fib(l)的值;将2赋给 处()函数的形参后,
38、由于n=2不满足if分支语句条件,因此程序退出递归,返回2:将1赋 给fib()函数的形参后,函数同样返回2。因此函数递归调用的最终结果 为返回2+2=4,即filX3)=4,程序最后输出值为4。28.15 5 629.4004 10014004 1001解析:本题考查静态成员变量在不同对象间的共 享现象。无论哪个对象修改了其静态变量的值,其他对象再访问该变量 时已经发生了变化。30 .格式化模型格式化模型解析层次模型与网状模型属于格式化模型。31 .protectedprotected解析:本题考察类的访问权限,属于基本知识,考 生应熟练掌握。32 .重载重载解析:解此类题的关键是读懂程序代
39、码,把程序 所要实现的功能分析出来。此题中,利用switch选择语句,并根据对3 取模后所得值的不同来分类,把所输入的整数分别累加后存入a, b, co 通过分析出此程序所要实现的功能,就可以对所输入的10个数进行分 类了。对3取模后为0的数有:87、54对3取模后为1的数有:64对3取模后为2的数有:32、53、32、98、56、98、83把这3组数字分别累加并分别存入a, b, c后得:a=141, b=64, c=452o 34.ptr- SetNum(50) ; ptr- SetNum(50);解析:本题考查的是考生使用 对象指针调用成员函数的能力,指针调用成员函数应该使用符号 35
40、.运行时的多态性运行时的多态性36 .应改为catch(char*s)。(2)应改为cateh(inti)”。(3)应改为catch(.)【解析】本题中第1个标识前的异常抛出语句为“throw(呢rror”);,其 中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类 型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语 句修改为“catch(char*S)”。第2个标识前的异常抛出语句为 44throw(int)0); ,其中的类型为int。对应的异常捕捉语句catch中应 该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配 的catch块,系统就会调用一个系统函数,使程序