《2022年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx》由会员分享,可在线阅读,更多相关《2022年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案).docx(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年四川省绵阳市全国计算机等级考试 C+语言程序设计模拟考试(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指。A.模块间的关系B.系统结构部件转换成软件的过程描述C.软件层次结构D.软件开发过程2 .如果表达式-x/y中的“-”和是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为A.operator/(x.operator(),y);B .operator/(operator(x),y);C.x.operator().operator/(y);D.y. operator/(operato
2、r(x);3 .类 MyClass 的定义如下:class MyClass public : MyClass()value=0 ;SetVariable(int i)value=i ; private : int value ; );则对下列语句序歹正确的描述是()。A.MyClass*p,my ; p=&my ;B.语句p=&my ;是把对象my赋值给指针变量pC.语句MyClass*p,my ;会调用两次类MyClass的构造函数D.对语句*p.SetV ariable(5)与语句 my . SetVariable(5)等价25 .在派生类中,对类对象成员,基类成员和非类对象成员的初始化程
3、 序是o26 .为解决在多重继承环境中因公共基类带来的二义性问题,C+语言 提供了【】机制。27 . Jackson方法是一种面向 的结构化方法。28 .数据结构分为逻辑结构和存储结构,循环队列属于 结构。29 .排序是计算机程序设计中的一种重要操作,常见的排序方法有插入 排序、【】和选择排序等。30 .下列程序的输出结果是【】。#include using namespace std;class Test public:Test() cnt+;Test() ent;static int Count() (return ent;private:static int ent;);int Test
4、: :cnt=0;int main()cout Test:Count() n;Test tl, t2;Test *pT3=new Test;Test *pT4=new Test;cout Test:Count() ;delete pT4;delete pT3;cout Test:Count() end 1;return 0;)31 .假定一个一维数组的定义为“chara8,b ; ”若把该数组最后一个元素 赋值给b应该采取的表达式为:032 .常用的黑箱测试有等价分类法、因果图法和错误推测法4 种。33 .下面程序的输出结果是【】。#include using namespace std;in
5、t x;void funA(int&,int);void funB(int,int&);int main()(int first;int sccond=5;x=6;funA(first,second);funB (first,second);cout first n n second nnx endl; return 0;)void funA(int &a,int b) (int first;first=a+b;a=2*b;b=first+4;)void funB(int u,int &v)(int second;second=x;v=second+4;x=u+v;)34 .语句int*i =
6、 new inti 10;,释放指针i的语句是35 .以下程序的运行结果是【】。#include #include using namespace std ;void main()chara10=China, b=Chin, c=ese;cout strlen(strcat(strcpy(a, b), c) endl ;四、程序改错题(10题)36 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题
7、程序:#include(iostream h)classTC (inti;public:TC;voiddisplay;TC;errorTC: TC coutnConstructornn, i=0;不小不小不不error不不不不不不TC: display tout classCO public:staticintn=O:COn+ + :)CO(n:):I * * * * * * * * error* *intCO: n;voidmain(COobj ;COobj27;CO*C=NULL:c=&obj:/%L* kL* kJ*不干不不不不不不enor不不不不不不不不eoutC . nendl ;c
8、outC0:nendl;)38 .使用VC + + 6-。打开考生文件夹下的源程序文件1 .cpp,该程序运 行时有错误,请改正程序中的错误,使得程序输出:9, 8, 7, 6, 5注章.错误的语句在/ *error* /的下面,修改该语句即可。其他的语句不能修改。试题程序:#include(iostream . h classTCkJ# 7,个干个个个不不不个个个小个小个个TC(inti) m i=i ;) voidprint)public :intmainvl*k1* kL*不干不不不不不不nor不不不不不不不不inti ;TC04(10);while(i5)I *e口Or* I i+ +
9、 :04 . print ;returnO ; )39 .使用VC+ + 6 .0打开考生文件夹下的源程序文件1 .cpp0本程序要 求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输 入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕 中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#include voidmain(inti=O ;charstr120;coutnEnterastringendwith? . nendl ;*1* rj*cin . getline(str, 120);e
10、rrorwhile(str) if(stri)=a)vi*error 不不不个不不不stri=stri-a + A ;i+ + ;)coutstrendl ;return ; )40 .使用VC + +6.0打开考生文件夹下的源程序文件1.cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/的下面。不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题
11、程序:#include #includevoidmain ()(chartsl=nabcn:/不不不不不不不不error不不不不不不不不assert(sizeof(s 1 )=3):chars210=nabn:/*1* *J*1 *1* si* *1* *1* *1* *1*/不不不不不不不不error不不不不不不不不assert(sizeof(s2)=2);coutnsizeof(s2)=10nendl ;chars3=23 :/不不不不不不不不error不不不不不不不不assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ;41 .使用VC
12、 + +6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number= 10number= 100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#includeclassTC (public :TC(inti) number=i ;4.下面关于友元的说法中错误的是()。A.友元函数可以访问类中的所有数据成员B.友元函数不可以在类内部定义C.友元类的所有成员函数都是另一个类友元函数D.友元函数必须声明在public区5 .算法指的是 o
13、A.计算机程序B.解决问题的计算方法C.解决问题的有限运算序列D. 排序算法6 .有如下函数模板的定义:template T func(Tx, T y)return X*x+y*y ; 在下列对func()的调用中,不正确的是()。A.func(3, 5);B.func (3, 5);C.func(3, 5.5);D.func (3, 5.5);7 .在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不 正确的是0A.派生类的对象可以赋给基类的对象8 .派生类的对象可以初始化基类的引用C派生类的对象可以直接访问基类中的成员voidSetNumber(intm) number=m ;)i
14、ntGetNumberconst(returnnumber ;)voidPrintconst (coutnnumber=nnumberendl ;)private :intnumber ;voidmainerrorKt rT* rrw rT*TCobjl ;objl . Print ;TCobj2(3);kL* vlvt* kL* kL*不不不不不不不下error个个个不个个个个objl . number=10 ;I !* ej*j*or* * *TC . SetNumber(lOO);objl . Print ;obj2 . Print ;42 .使用VC+6.。打开考生文件夹下的源程序文件
15、1.cpp,该程序 运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error0 ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题程序:#includekX*catch(chars) coutsendl;) try throw(int)0);7, 个个个个个个个个rror不不不个个不不catch coutiendl;) try (throw(O);throw(nerrorn);si*vl*个个个个个个个个rror个个个个个个个个catch(coutnER
16、RORnendl;returnO ;)43 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/ / *errcr*的下面,修改该语句即可。试题程序:#include/不不不不不予error不不不不不不voidmaink1不小不小不不error不不不不不不intm=0142:kL*j *1不不不不不不eno举不不不不不intn=0X27:intq=32;cout m endl;cout n endl ;cout q endl;return ;)44 .使用VC+6.。打开考生文件夹下的源程序文件1
17、. cpp。本程序 要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#include voidmain inti=0;charstr120;coutnEnterastringendwith?. nendl;vt*vL*vL*k1个个个不不不不不nc)i不不不不不个不cin. getline(str, 120);1* .!vt* k1*个个个个个不小个nor个个个个个个个个while(
18、str)KL KLKLk1 KE个个个个个个个个rror个个个个个个个个if(stri)=a)stri=stri-a+A;i+ + ;)coutstrendl ;return ;)45 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#includek!个个个个个个个个nc)i个个个个个个个个catch coutnERR
19、ORnendl ;)returnO;五、综合应用题(2题)46 .使用VC+6. 0打开考生文件夹下的源程序文件3. cpp,其中定 义了类BA、PA1和PA2,其中PA1类由BA类公有派生,PA2类由 PA1类公有派生。上述3个类的定义并不完整,请按要求完成下列操 作,将程序补充完整。程序输出结果如下:7 00511 1定义类BA的构造函数,该构造函数有一个整型的参数m,在构造 函数中将m赋值给数据成员a0请在注释1之后添加适当的语句。定义类PA1的构造函数,该构造函数有两个整型的参数m和n,在 构造函数中将m赋值给数据成员b,将n作为基类BA构造函数的参 数值传人。请在注释2之后添加适当的
20、语句。定义类PA2的构造函数,该构造函数有3个整型的参数m、n和 k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类 PA1构造函数的参数m和no请在注释3之后添加适当的语句。(4)完成类PA2的成员函数show的定义,该函数调用基类成员函数, 输出基类私有成员a、b及类PA2自身的数据成员C的值,上述3个 值在输出时用空格隔开。请在注释4之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#include(iostream. hclassBA(inta;public:intgetareturna; );classPAl : publicBA
21、(intb;public:7,7,7*7,7,T,、 7,7 7, 7,7,j q. q. q. q.intgetb returnb ; ;classPA2 : publicPAl (intC;public:/*i* *1* *1* kJ* *J si* *J k!kL* k! *1 *1k!/rj* rj*voidshow/ / *4* );voidmainPA2a(7, 5, 10);couta . getaendl ;couta . getbendl ;a. show;)47.使用VC+6. 0打开考生文件夹下的源程序文件3. cpp。其中定 义的类不完整,按要求完成下列操作,将类的定义
22、补充完整。每卖出 一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及 总个数,同时允许退货,请按照以下的操作,把类补充完整。定义类TCFruit的私有静态数据成员float型变量AllWeight和int型 变量AHN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加 到AUWeight中,并且AUNo自加。请在注释2后添加适当的语句。(3)在析构函数中,在在IWeight中减去weight,然后析IN。自减,请 在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。 注意:增加或者修改代码
23、的位置已经用符号表示出来,请不要修改其 他的程序代码。试题程序:#include(iostream. hclassTCFruit private:floatWeight;/k! *1 *1* *J st* 1k kL k! 7,7,kL/I *T* *T* *T* rT* rr*staticintAHNo;public:TCFruit(floatw)/*1* *1* *1* *1*vj* vt* vl*/ q、J/卜.卜,卜AllWeight+=w:A11N0+ +:TCFruit/kI# vl* Kt*、1 vt .! k9/ q、,I、q、q,、4q、q, 4、AllWeight-=Wei
24、ght:) voiddisplay coutnSellaFruitwithnWeightnk9n endl;coutAllsellnumber:HAllNoendl ;coutnAllsellweight:nAllWeightnk9n5 &6%3的值是A.-l B.非零值 C.O D.111 .下列程序段的输出结果是 #include voidfun(int * X, int * y) cout* X=3 ;*y=4 ; void main() int x=l, y=2 ;fun(&y, &x);cout Xy endl ;A.2143B.1212C.1234 D.2112二、单选题(13题)
25、11.有如下程序:#include +using namespace std ;#includeusing namespace std;class Base public:floatTCFruit: AllWeight=O. 0; intmainTCFruitFruitl( 1. 2);Fruitl. display;TCFruitFruit2(2. 3);Fruit2. display;returnO ;)六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test32_3o此工程包含一个 test32_3.cpp,其中定义了复数类complex,但该类的定义并不完整。请 按要求
26、完成下列操作,将程序补充完整。(1)定义复数类complex的私有数据成员real和image,用来分别表示复 数的实部和虚部,它们都是double型的数据。请在注释“*1*之后添 加适当的语句。(2)添加复数类complex的带一个参数的构造函数,分别将real和image 赋值为参数r的值和0.0,请在注释“*2*”之后添加适当的语句。完成复数类complex的“+”运算符重载成员函数的定义,两个复数相 加是将复数的实部和虚部分别进行相加,请在注释“*3*”之后添加适 当的语句。(4)完成复数类 complex 的友元函数 isequal(complex *cl,complex *c2)的
27、定义,如果复数C1与c2相等即C1与c2的实部和虚部分别相等,则返回1,否则返回0。请在注释“*4*”之后添加适当的语句。程序输出结果如下:36+0i=36+0i注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件test32_3.cpp清单如下:#include class complex public:complex() real=image=O.O;) complex(double r)* 2 *)complex operator+(const complex &c);friend bool isequal(complex *cl,complex *c2 void di
28、splayO;);complex complex:operator+(const complex &c)* 3 *temp .real=real+c .real;temp.image=image+c.image;return temp;)bool isequal(complex *cl,complex *c2)I /* 4 *return 1;elsereturn 0;)void complex: displayO cout =0) cout image i;else if (image 0) cout image nin;)void main() (complex cl,c2(36.0);c
29、l=cl+c2;cl.displayO;if (isequal(&cl,&c2) cout else coat n n;c2.display(); cout endl;)49.使用VC6打开考生文件夹下的工程MyProjl3。此工程包含一个源程 序文件MyMainl2.cppo程序中定义了两个类Base和Derived,但类的 定义并不完整。请按要求完成下列操作,将类的定义补充完成:定义类shapes的保护成员x和y,它们都是整型变量。请在注释“/* *1*之后添加适当的语句。完成构造函数shapes(intd,intw)定义,使类shapes的保护成员x、y分 别初始化为d、w,并分别具有默
30、认值0、0。请在注释“/* *2* *”之后添 加适当的语句。完成类shapes的成员函数setvalue(int d,int w)的定义,shapes类的数 据成员x和y分别被设置成d和wo请在注释“/* *3* *”之后添加适当 的语句。将类sh叩es的成员函数voiddisp。设置成纯虚函数。请在注释“/* *4* ”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMainl3.cpp清单如下:/MyMainl3.cpp#include using namespace std ; class shapes*public :* * *2* *
31、*void setvalue(int d, int w)*3*( * * * 4 * * *);class square : public Shapes (public :void disp()(cout x*y setvalue(10, 5);ptr- disp();return 0 ; )参考答案LB软件设计包括软件的结构设计、数据接口设计和过程设计。其中软 件结构设计主要包括系统由哪些子系统构成,以及这些子系统之间的关 系是怎样的,并将这些内容编写成文档;数据接口设计的任务是为每个 子系统设计其与其他子系统间的接口,并编写成文档,这个接口要是一 个无二义的接口,不需要子系统的操作知识就可
32、以使用;过程设计是指 系统结构部件转换成软件的过程描述。2.B解析:本题考核运算符的重载。假定已经作为某个类的成员函数重 载了二元运算符+,且cl、c2都是该类的对象,则cl . operator+(c2)与 cl+c2含义相同。如果+作为该类的非成员函数重载,贝IJ operator+(c 1 ,c2) 与cl+c2含义相同。同理,运算符作为友元函数重载,则(-x)/y与表 达式operator / (-x),y)相同。前缀运算符作为友元函数重载,则-X 与 operator-(x)相同,所以组合起来是 operator/(operator -(x),y);,即 B 选项。3 .D4 .D解
33、析:友元提供了不同类或对象的成员函数之间、类的成员函数与 一般函数之间进行数据共享的机制。类可以利用friend将一般函数、其 他类成员函数或者其他类声明为友元。友元的声明可以放在类的任何一 个区域。但是友元的实现不可以在类内部。5 .C6 .C解析:本题考核函数模板的使用。对于C)选项,编译系统从3获 得的信息是“T对应于inf,.从5.5处获得的信息是“T对应于double”,二者相互矛盾,在编译时会产生错误。对于D)选项中紧跟在函数名后 的int就是模板实参表,通过它通知编译系统在调用过程中,double 型的参数5.5将被自动换成int型。7 .C解析 友元函数的定义既可以在类内部进行
34、,也可以在类外部进行。 它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非 成员函数可以访问类的私有成员。8 .DDo【解析】本题考查break语句的使用。break可以结束switch语句 和for循环语旬,但是不能使用在条件判断语句内。9 .C解析逻辑与运算符为真的前提是两边的表达式都为真,本题中6%3 的值为0,显然该表达式的值应该为0。注意:/是整除运算符,当两个 操作数都为整数时,结果为整型,将小数部分舍去。10 .A解析:在fun函数中,x接收的是main函数中y的地址,所以* x 值为2,同样,* y值为1,所以第1次输出的是2 1,第2次改变* x 的值等同于改变y
35、的值,改变*y的值也即改变x的值,所以第2次输 出的是4 3。注意:C+语言中函数的传参方式中关于指针的应用。11.B12.Drn软件是与计算机操作相关的计算机程序、规程、规则,以及可能有的 文件、文档及数据;软件开发要受到计算机系统的限制;软件是一个 逻辑实体,不是物理实体,软件具有抽象性。因此选项D正确。13.CCo【解析】基类中说明的虚函数,在派生类中自然就是虚函数,所以 类B中fund是虚函数;而类A中的func2没有被关键字virtual修 饰;所以不是虚函数。14.C15.BBo【解析】eonst函数只能被eonst对象调用,a. get函数调用的返回 值是3,而b. get调用的
36、返回值是8。16.D解析:静态数据成员必须在类体外初始化,它是类的所有对象的共 有成员,需要使用类名调用,静态数据成员的初始化与权限控制无关。 17.BBo【解析】根据题目,若以这种方式定义变量k时,编译程序仅为k 开辟存储单元,并未在存储单元中存放任何初始值,所以变量中的值 无意义,称变量值“无定义”。所以正确答案为选项B。18.C本题考查的是考生对引用的掌握,ref实际上就是变量num的别名,所 以ref=ref+2时,num已经变成了 3。19.A解析:作为一个算法,一般应该具有下列4个特征:(1)可行性, 即考虑到实际的条件能够达到一个满意的结果;(2)确定性,算法中的 每一个步骤都必
37、须是有明确定义的,(3)有穷性,一个算法必须在有限 的时间内做完;(4)拥有足够的情报。20.DDo【解析】本题考查for循环使用。rn当i=3时,j可以取1和2, i+j分别是4和5,执行printf(”n”)换行,i为2。rn当i=2时,j 可以取1和2, i+j分别是3和4,执行printf(”n”)换行,为1。rn当i=l时,J可以取1和2, i+j分别是2和3,执行printff n”) 换行,i-为0,不符合循环,退出。21.A22.CCo【解析】函数Demo为构造函数,而Demo(constDemo&x)为复制 构造函数。C+在创建一个对象时,会自动调用类的构造函数,所以 语句D
38、emoa, d;将调用函数Demo2次。当一个对象作为实参传递给 函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时 调用拷贝构造函数。由此可知语句dnuserCode(a);调用拷贝构造函数 3次。23.DAo【解析】C+流的输入运算符“”和输出运算符“vv”只能作为非 成员函数重载。重载输入流运算符“”须使用的原型是istream& operator(istream& , &);。24 .A(aa)c(aaq+l)或 c(aa+l)A(aa)。A(aa), c(aaq+l)或 c(aa+l), A(aa)o解 析:题中要求用aa初始化基类A,用aa+1初始化类对象成员c,用的 初
39、始化列表的形式,即A(aa), c(aa+l)或c(aa+l), A(aa)o25 .基类成员类对象成员非类对象成员基类成员u3000类对象成员 u3000非类对象成员解析:在派生类的初始化过程中,最先初始化的 是基类对象,然后是其他类的对象成员,包括自身类对象的引用或指针, 或其他类的对象,最后在是非类对象成员。析构的时候则反之。26 .虚基类虚基类27 .数据结构数据结构28 .存储存储解析:数据结构包括逻辑结构和物理结构(存储结构),逻辑 结构包括集合、线性、树、网络等,而存储结构主要指的是逻辑结构的 存储,包括顺序、链表、索引、散列等。29 .交换排序交换排序解析:常见的排序方法有插入
40、排序(包括简单插入 排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选 择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作 用机制和区别。30 .44解析:static是局部静态变量,始终存在,实例化一个类就增加1。 3Lb=a732.边值分析法边值分析法33.10 10 2010 10 20解析:本题考核函数的引用传递。“引用”实际上是 给一个已知变量起个别名,对引用的操作也就是对被它引用的变量的操 作。函数funA的功能是将第二个实参的值乘以2再赋值给第一个实参 (通过引用传递实现),函数funB的功能是将全局变量x加上4再赋值 给第二个实参,同时x等于第一个实参与第二个实参相加的和。34.deletei35.77解析:本题主要考查C+中字符串函数的使用。strcpy(sl, s2)将s2的内容赋值到si中;strcat(s 1, s2)连接si和s2两个字符串;strlen(s) 返回字符数组s的长度。因此最后输出的结果是b和c进行连接后的字 符串长度,即7。36.(1)应改为“TC:TC”。(2)应改为voidTC:display”。应改为“TC:TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名 和作用域运算符“:”,作用域运算符用采表示某个成员属于哪个 类,使用格式为“(