2023年吉林省白城市全国计算机等级考试C语言程序设计测试卷(含答案)_第1页
2023年吉林省白城市全国计算机等级考试C语言程序设计测试卷(含答案)_第2页
2023年吉林省白城市全国计算机等级考试C语言程序设计测试卷(含答案)_第3页
2023年吉林省白城市全国计算机等级考试C语言程序设计测试卷(含答案)_第4页
2023年吉林省白城市全国计算机等级考试C语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年吉林省白城市全国计算机等级考试

C++语言程序设计测试卷(含答案)

学校:班级:姓名:考号:

一、1.选择题(10题)

I.在下列数据管理的各阶段中,数据独立性最高的阶段是

A.手工管理B.文件系统C.数据项管理D.数据库系统

2.下面关于运算符重载的描述错误的是

A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合

性和运算符的语法纭构

B.不是所有的运算符都可以进行重载

C.运算符函数的调用必须使用关键字operator

D.在C++语言中不可通过运算符重载创造出新的运算符

3.软件生命周期中所花费用最多的阶段是()。

A.详细设计B.软件编码C.软件测试D.软件维护

4.若有以下程序:

main()

{intk=2,i=2,m;

m=(k+=i*=k);

cout<<m<<"J<<i<<endl;

执行后的输出结果是

A.8,6B.8,3C.6,4D.7,4

5.采用面向对象技术开发的应用系统的特点是()。

A.重用性更强B.运行速度更快C.占用存储量小D.维护更复杂

6.面向对象程序设计将数据和什么放在一起,作为一个相互依存、不可

分割的整体来处理?

A.对数据的操作B.信息C.数据隐藏D.数据抽象

7.下面程序的输出结果是()。#include<iostream.h>Classexample{int

a;public:example(intB.{a=b++;}voidprint(){a=a+1cout<<a<<"";}

voidprint()const{cout<<a<;}};voidmain(){examplex(3);Const

exampley(2);x.print();

A.22B.43C.42D.32

8.语句cout<<setprecision(2)<<1024.4567;的输出结果为

A.1024.4567B.1024C.1024.45D.le+003

9.表达式10>5&&6%3的值是

A.-lB.非零值C.OD.l

10.面向对象程序设计思想的主要特征中不包括

A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性

二、单选题(13题)

11.有如卜程序:

#include<iostream>

usingnamespacestd;

classBasel

(

public:

Basel(intD.{cout«d;}

一Basel{}

};

classBase2

(

public:

Base2(intD.{tout«d;}

~Base2{}

};

classDerived:publicBasel,Base2

(

public:

Derived(inta,intb,intc,intD.:Basel(B.,Base2(A.,bl(D.

b2(C.{}

private:

intbl:

intb2:

);

intmain

(

Derivedd(1,2,3,4);

return0;

执行这个程序的输出结果是()oA.1234B.2134c.12D.21

12.下列关于运算符函数的叙述中,错误的是

A.运算符函数的名称总是以operator为前缀

B.运算符函数的参数可以是对象

C.运算符函数只能定义为类的成员函数

D.在表达式中使用重载的运算符相当于调用运算符重载函数

13.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的

变化是()

A.增加了一些新的运算符B.允许函数重载,并允许设置缺省参数C.规

定函数说明符必须用原型D.引进了类和对象的概念

14.有如下程序:

#nclude<iostream>

usingnamespacestd;

classMyClass{

public:MyClass(intx):val(x){}

voidSet(intx){Val=x;}

voidPrint()const{cout<<Mval="<<Vai<<*\t';}

private:intval;

};

intmain(){

constMyClassobj1(10);

MyClassobj2(20);

objl.Print();〃语句1

obj2.Print();〃语句2

objl.Set(20);〃语句3

obi2.Set(30);〃语句4

return0;

)

其主函数中错误的语句是()o

A.语句1B.语句2C.语句3D.语句4

6已知类A有公用数据成员a,并重载了二运算符,且有Aobj2;

constA*ptr=newA;,则下列语句错误的是()。

A.ptr->a=100;B.ptr=&obj2;C.ptr++;D.obj2=*ptr;

16.下列程序的执行结果为()。

#include<iostream.h>

voidmain

(

inta=3,b=0;

int*P=&a;

b=+a++;

cout«*P«,7,«b«endl;

)

A.3,4B.4,3C.3,4D.4,4

17.关于在调用模板函数时模板实参的使用,下列表述中正确的是()0

A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获

得相同的信息,则君可以省略

B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的

若干个参数,则都可以省略

C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略

D.对于常规参数所对应的模板实参,任何情况下都不能省略

18.对于类定义

classA{

public:

voidfunc2{}

};

classB:publicA{public:

w)idfuncl|cout«HclassBfuncl”vvendl:}

virtualvoillfimc2{cout«"classBfunc2"«endl:}

};

下面正确的叙述是0。

A.A::rune2和B::fund都是虚函数

B.A::func2和B::funel都不是虚函数

C.B::fund是虚函数,而A::func2不是虚函数

D.B::fund不是虚函数,而A::func2是虚函数

19.下面程序的运行结果是()。

#include<iostream.h>

voidmain()

(

inti=l:

while(i<=8)

if(++i%3!=2)continue;

elsecout«i;

}

A.25B.36C.258D.369

20.下列有关继承和派生的叙述中,正确的是

A.派生类不能访问基类的保护成员

B.作为虚基类的类不能被实例化

C.派生类应当向基类的构造函数传递参数

D.虚函数必须在派生类中重新实现

21.己知有数组定义

chara[3][4];

下列表达式中错误的是

A.a⑵=“WIN”

B.strcpy(a[2],"WIN")

C.a[2][3]=W

D,a[0][1]=a[0][1]

22.有如下程序:

#include<iostream>

usingnamespacestd;

classVAC{public;

intf()const(return3;}

intf(){return5;}

):

Intmain(){

VACvl;constVACv2;

cout<<vl.f()<<v2.f();

return0:

}

运行时的输出结果是Oo

A.53B.35C.55D.33

23.下列有关继承和派生的叙述中,正确的是()。

A.如果一个派生类公有继承其基类,则该派生类对象可以访问基类的保

护成员

B.派生类的成员函数可以访问基类的所有成员

C.基类对象可以赋值给派生类对象

D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类

三、2.填空题(12题)

24.软件开发过程主要分为需求分析、设计、编码与测试4个阶段,其

中阶段产生“软件需求规格说明书

25.软件生命周期包括8个阶段。为了使各时期的任务更明确,又可分

为3个时期:软件定义期、软件开发期、软件维护期。编码和测试属于

[]期。

26.有一种只在循环语句或switch语句中使用的流程控制语句,表示该

语句的关键字是______0

27.有以下程序:

#include<iostream>

usingnamespacestd;

classCFactorial

(

private:

intvalue;

intfact;

public:

CFactorial(intval);

voidCalculateFactorial();

voidDisplayO;

CFactorial::CFactorial(intval)

(

value=val;

fact=1;

)

voidCFactorial::CalculateFactorial()

(

inti=value;

while(i>1)

fact*=i—;

)

voidCFactorial::DisplayO

(

cout<<value<<”!="<<fact<<endl;

)

intmain()

(

CFactorialA(5);

A.CalculateFactorial();

A.DisplayO;

return0;

)

程序中,类CPactorial的功能是【】,该程序运行的结果是[】。

28.阅读以下程序:

#include<iostream.h>

voidmain()

(

staticintalJ[3]={9,7,5,3,1,2,4,6,8};

inti,j,sl=Ots2=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

(

if(i==j)sl=sl+a[i][j];

if(i+j==2)s2=s2+a[i][j];

)

cout<<s1<<'*,"<<s2<<endl;

I

则该程序的输出结果为【】。

29.下面程序的输出结果是【】。

#defineMIN(a,b)(((a)<(b))?a:b)

#include<iostream.h>

voidmain()

(

intx=3,y=5;

cout<<MIN(x,y)<<end1;

}

30.有以下程序:

#include<iostream>

#include<string>

usingnameSpacestd;

classperson

(

intage;

Char*name;

public:

person(inti,Char*str)

(

intj;

j=strlen(str)+1;

name=newchar[j];

strcpy(name,str);

age=i;

)

〜person()

(

deletename;

cout<<;

)

voiddisplayO

(

cout<<name<<'*:"<<age;

)

);

intmain()

(

persondemo(30,"Smith");

demo.displayO;

return0;

则该程序的输出结果为:【】。

31.请将下列类定义补充完整。

classBase(public:voidfun(){cout<<HBase::fun"<<endl;}};

classDerived:publicBase

(

public:

voidfun()

(

______〃显式调用基类的fun函数

cout<<"Derived::funH<<endl;

1

);

32.请在下列程序中的横线处填写正确的语句。

#include<iostream>

usingnamespacestd;

classBase{

public:

voidfun(){cout<<"Basefun"<<endl;}

);

classDerivde:publicBase{

public:

voidfun(){

______〃调用基类的函数fun()

cout<<"Derivedfun'*<<endl;

}

);

33.下列程序的输出结果是

#include<iostream>

usingnamespacestd:

template<typenameT>

Tfun(Ta,Tb){return(a<=b)?a:b;}

intmain()

(

cout<<fun(3,6)<<4,'<<fun(3.14F,6.28F)<<endl;

return0;

}

34.如果表达式-x中的是重载的类运算符,采用运算符函数调用格

式,及表达式还可以表示为0

35.在C++语言的结构化程序设计中,【】是程序的基本组成单元;在

C++语言的面向对象设计框架中,【】是程序的基本组成单元。

四、程序改错题(10题)

36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果

为:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=l

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

(1)不能删除assert()语句。

(2)只能修改后面的数字。

提示:assert函数如果为假,则会产生一个中断异常。

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

chartsl=nabc":

/1

assert(sizeof(s1)==3):

cout«Hsizeof(s1)=5u«endl;

chars2llOJ=Mabn:

/小小小小年年•小prrcr不不不不不不予不

assert(sizeof(s2)==2);

cout«,,sizeof(s2)=10,'«endl;

chars3=23:

//

|/******汴*errr)r不不不不不不予不

assert(sizeof(s3)==4);

cout«Msizeof(s3)=1u«endl;

return;

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******error******的下面,修改该语句即可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

TC:TC

cout«',Constructor',«n,

i=0;

)

//

//小小小小小小prrcr不不不不不不

TC:display

tout«,,i=,,«i«n,M«endl;

/汴汴汴不不不prmr不不不不不不

TC:TC

COUI«"Destructof'«endl:

}

voidmain

TCa;

a.display;

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//****«*error******的下面,修改该语句即

可。

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

);

!«*««*«

//****^**不**

TC:TC

(

cout«',Constructorn«n,";

i=0;

)

//«1•^1*«S««1•«1««1**&**&*

/不不不不不不prr()r不不不不干不

TC:display

tout«Hi=',«i«n,M«endl;

!!******e[Tor******

TC:TC

(

COUI«',Destructor,'«endl:

)

voidmain

(

TCa;

a.display;

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行有问题,请改正main函数中的错误,使程序的输出结果为;

number=l

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intmi

(

number=m;

}

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«Hnumber="«number«endl;

)

private:

intnumber;

);

voidmain

/

/f不*T*不*T**?*小*T*小m*/**^1**^不不小小不不不

TCobjl;

objl.Print;

TCobj2⑶;

/-X*

//********errcr不不不不不却亭予

objl.number=10;

II********error*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

40.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

!!******error******白勺卜山^。

试题程序:

#include<iostream>

#include<fstream>

/1

usingstd;

voidWriteFile(char*s)

ofstreamout1;

f*1**1**!**1**4**£•*£**£**4•

//小小小小办小小小prrcr不不不不不不不不

outl.open("l.txt",binary|app);

for(inti=0;s[i]!=0;i++)

(

l*1**1**1**1**1**1**1**1**4*«£**4*

//小小小小小小小小prrcr不不不不不不不不

outl.puts(s[i]);

)

outl.close;

}

voidClearFile

(

ofstreamout1;

outl.open("l.txt");

outl.close;

}

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:u«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程

序运行有问题,请改正main函数中的错误,使该程序的输出结果正

确。

程序输出:

8

8

注意:错误的语句在/********error********/的下面。修改该语句

即可,其他的语句不能修改。

试题程序:

#include(iostream.h>

classCO

public:

/«*1•«>!•«>1•«*!•«>1•«>!•«*!•/

不不不不不不不不error不不不不不不不不/

staticintn=O:

CO

n++:

〜CO

):

•^/

/********e]Tcr不不不不不不不不/

intCO:;n;

voidmain

COobj;

COobj2[7J;

CO*C=NULL:

c=&obj:

不不不不不不不不error不不不不不不不不/

eout«C.n«endl;

cout«C0::n«endl;

}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序

要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可

能输入多行,当输入字符"?''时,默认字符输入结束,最后把结果输出

到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******en*or******的下面。

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120J;

cout«HEntcrastringcndwith?."«cndl;

/*1**2**1*«<>*1**1**2**2**2*

//不不不不不不不不prr()r不不不不不不不不

cin.getline(str,120);

1*1**1**1*«*««•««*»

//****举举**pji*cr*不******

while(str)

/•,・*t«•[・•,・•,・•£•«1•*X**X**X**£•«£•«£•

//小小小小小小小小error不<**><•<**><**>

if(str|jD二a)

str[i]=str[iJ-a+A;

i++;

}

cout«str«endl;

return;

43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行有问题,请改正main函数中的错误,使程序的输出结果为:

number=l

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******err()r******的下面0

试题程序:

#include<iostream.h>

classTC

public:

TC(inti)

number=i;

voidSetNumber(intmi

(

number=m;

}

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«"number=H«number«endl;

)

private:

intnumber;

voidmain

TCobjl;

objl.Print;

TCobj2(3);

//

//年不不不不小不小prrcr不不不不予不予不

objl.number=10;

II********error*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

注意:错误的语句在/********error********/的下面,修改该语句即

可。其他的语句不能修改。

试题程序:

#include(iostream.h>

classTC

Ii

/********errcr不不不不不不不不/

TC(inti)

m_i=i;

)

voidprint

cout«—m_i«,

)

public:

intm_i;

intmain

l^1*^1*__•!»/

/不不不不不不不不error不不不不予不不苓/

inti;

TC04(10);

while(i>5)

!***************!

i++

04.print;

)

cout«endl;

returnO;

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******enw******的下面。

试题程序:

#include<iostream.h)

intmain

(

try

throw(nerror");

/小小小小小小小小prrcr不不不不不不不不

catch(chars)

(

cout«s«endl;

try

(

throw((int)0);

)

/*1**1*■!**1«

//********errcr不不不不不不不不

catch

(

cout«i«endl;

)

try

(

throw(O);

throwC^rror");

/*t«*t«*t«*t«*t«*1*-L■>■的■的一^

//年小不小不小小小prrcr不不早亭不寿寿寿

catch

(

cout«MERROR"«endl;

}

returnO;

五、综合应用题(2题)

46.(1)应添加“virtualvoidGetNamt!=0;"。

(2)应添力CTconstchar*GetName2”。

⑶应添加“TC2(char*str)”°

⑷应添加“m_str[i]=O;

【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚

函数在C++中।在基类中用virtual声明成员函数为虚函数。纯虚

函数是在声明虚函数时被"初始化’’为0的函数,即

4t,5

virtualvoidGctName=0;O第2处要求“函数GetName2实现获得名字

的缓存,但只获得读允许操作这个缓存工只能弓I用数据成员,而不能修

改,所以使用常成员函数,其一般形式为“const函数类型函数名'即

44,,

constchar*GetName2o第3处要求“实现TC2的构造函数二TC2的构

造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数

组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为

“TC2(char*str)>第4处要求“完成TC2的构造函数,实现对名字的处

理“,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC

中的成员变量所以这里补全变量赋值操作“m_str[i]=0;»。

47.使用VC++6.0打开考生文件夹下的源程序文件3.cppo类

People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓

名,然后输出这个姓名到屏幕。

其中定义的类并不完整,按要求完成下列操作,将类的定义补充完

整。

⑴完成类的构造函数功能,请在注释1后添加适当的语句。

⑵完成构造函数对姓名的赋值,请在注释2后添加适当的语句。

⑶定义类的友元函数fun,请在注释3后添加适当的语句。

(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其

他的程序代码。

试题程序:

#include<iostream.h>

classPeople

(

public:

/fat*

/fI»Y»»Yw»T«»T«

(

inti;

for(i=0:sUserName[i]!=O:i++)

{m_UserName[i]=sUserName[i];

f*1**1**1**1**1*•1**1**1**1*

/f*T**7*f*T**T**T**T*

m_Old=nOld;

)

private:

charm_UserNamef32];

intm_01d;

/7,*2**2^*2**2*

/f•卜•卜•卜•[••[••[••[••卜4•卜,卜,;、q、;、(、,j、

};

voidfun(char*s,People&personl,People&person2

/I********4********

if

for(inti=0;person!.m_UserName[i]!=0;i+

+)

s[i]=personl.m_UserName[i];

s[i+l]=0;

)

else

for(inti=0;person?.m_UserName[i]!=0;i+

+)

{s[il=person2.m_UserName[i];

s[i+l]=0;

)

)

)

voidmain

(

chars[32];

PeopleplC'abc1',20);

Peoplep2(ndef,,30):

fun(S,pl,p2);

cout«s«endl:

return;

六、3.综合应用题(2题)

48.使用VC6打开考生文件夹下的工程testl6_3,此工程

⑴定义类Cat的保护数据成员itsAge用于表示年龄,它是int型的数

据。请在注释“〃**1**”之后添加适当的语句。

⑵定义类Cat的保护数据成员GetAgeO的类外定义,返回成员的itsAge

值,请在注释“〃**2***之后添加适当的语句。

⑶完成成员函数SetAge(intage)的类外定义,把数据成员itsAge赋值为

参数age的值,请在注释“〃**3***之后添加适当的语句。

(4)完成成员函数Meow的类外定义,使其输出字节符串“meow.”到屏幕

上。请在注释“**4**”后添加适当的语句。

输出结果如下:

meow.

kittyisacatwhois5yearsold.

meow.

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test113.cpp清单如下:

#include<iostream.h>

classCat

public:

intGetAge();

voidSetAge(intage);

voidMeow();

protected:

〃**]**

};

intCat::GetAge()

(

)

voidCat::SetAge(intage)

(

)

voidCat::Meow()

(

)

voidmain()

(

Catkitty;

kitty.Meow();

kitty.SetAge(5);

cout<<"kittyisacatwhois

cout<<kitty.GetAge();

cout<<*'yearsold.Vn";

kitty.Meow();

49.使用VC6打开考生文件夹下的工程test4_3o此工程包含一个源程

序文件test4_3.cpp,其对一个学校的教师和考生情况进行了描述。由于

教师和考生之间有相同的信息,如姓名、年龄等,所以可抽象出一个基

类person,考生类student和教师类teacher作为person类的派生类。请

按要求完成下列操作,将程序中的类定义补充完整。

⑴定义基类person的私有数据成员name和age,分别用于表示姓名和

年龄,name为字符指针,age为血型的数据。请在注释“〃**1**»之后添

加适当的语句。

(2)完成基类person的重载构造函数person(char*minta)的定义,把数据

成员name,age分别初始化为参数n,a的值,请在注释“//**2**”之后

添加适当的语句。

⑶根据主函数main中对si的声明,定义派生类student的构造函数。

在注释“〃**3**”之后添加适当的语句。

(4)完成派生类teacher成员函数voidsetinf(ehar*n,inta,char*d,char*1)

的定义,其功能为记录教师的姓名、年龄、院,系与职称信息。请在注

释“〃**4***之后添加适当的语句。

输出结果如下:

刘雷(45)destruclor

蒋军(23)destructor

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test4_3.cpp清单如下:

#include<iostream.h>

classperson

(

〃**]**

public:

person(){}

person(char*n,inta)

(

〃**2**

voidsetname(char*n){name=n;)

voidsetage(inta){age=a;}

〜person。{cout<<name<<"(u<<age<<")destructor'^<<endl;)

);

classstudent:publicperson

(

char*department;

intcode;

public:

(

department^;

code=c;

}

};

classteacher:publicperson

(

char*department;

char*level;

public:

teacher(){}

voidsetinf(char*n,inta,char*d,char*1)

(

department=d;

level=l;

)

);

voidmain()

(

students1("蒋军二23,”计算机学院二2);

teachertl;

tl.setinf(“刘雷",45,”计算机学院”,”教授)

参考答案

1.D解析:显然,在数据库系统阶段,数据独立性最高。

2.C解析:例如“="运算符就不能被重载,通过重载可以创造新的运

算方式,但是不能臆造新的运算符;定义的时候必须使用关键宇operator,

而调用时可直接使用运算符;

3.D解析:软件生命周期分为软件定义、软件开发及软件运行维护3个

阶段。本题中,详细设计、软件编码和软件测试都属于软什开发阶段;

维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价

最大的一个阶段.软件工程学的一个目的就是提高软件的可维护性,降

低维护的代价。

4.C解析:首先进行括号内的运算,注意赋值表达式是从右向左进行的。

i=l*k,k=k+i,m=k,所以计算得m=6,i=4o

5.A解析:使用面向对象方法开发的应用系统,强调封装和复用。封装

隐藏信息,使得被封装的模块与外界的耦合度更低,更容易重用。软件

复用是将已有的软件成分用于构造新的软件系统。可以被复用的软件成

分一般称作可复用构件,无论对可复用构件原封不动地使用还是作适当

的修改后再使用,只要是用来构造新软件,则都可称作复用。面向对象

方法之所以特别有利于软件复用,是由于它的主要概念及原则与软件复

用的要求十分吻合。面向对象方法从面向对象的编程发展到面向对象的

分析与设计,使这种方法支持软件复用的固有特征能够从软件生命周期

的前期阶段开始发挥作用,从而使OO方法对软件复用的支持达到了较

高的级别。与其他软件工程方法相比,面向对象方法的一个重要优点是,

它可以在整个软件生命周期达到概念、原则、术语及表示法的高度一致。

这种一致性使得各个系统成分尽管在不同的开发与演化阶段有不同的

形态,但可具有贯穿整个软件生命周期的良好映射。这一优点使OO方

法不但能在各个级别支持软件复用,而且能对各个级别的复用形成统一

的、高效的支持,达到良好的全局效果。综上所述,选项A为本题正确

答案。

6.A解析:面向对象语言包含3个要素,即对象、类和继承。这3个要

素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对

数据的操作当成一个整体即对象。

7.C解析:“++”是石结合的,所以先赋值为3,最后输出3+1;常成员

函数只有常对象才能调用,所以输出2。

8.D解析:setprecision()函数为设置小数位数。注意:C++中I/O流各种

函数的使用例如:setw(),setfill()o

9.C

10.B解析:C++是一种面向对象的程序设计语言它充分支持面向对

象思想中的3个主要特征:封装性、继承性、多态性。B选项所描述是

结构化程序设计的思想。

11.D

本题考查派生类的构造函数和析构函数,在定义一个派生类的对象

时,先调用基类的构造函数,然后再执行派生类的构造函数,对象释

放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定

义一个派生类对象时,分别调用基类的构造函数,所以分别输出21。

12.C解析:运算符函数可以重载为成员函数也可以重载为非成员函数,

如重载为友元函数。

13.D

14.C

解析:此题考查的是常对象。使用const关键字修饰的对象称为常对

象,它不能被更新。主函数中声明的objl是常对象,因此。bjl不能被

更新,即语句3更新。均1的语句错误。

15.A

Ao【解析】本题考查const修饰符的作用。注意,const位置不同,其

修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,

所以,ptr可以重新指向新的对象,而ptr->a则无法被更新。

16.B

*P为所指对象a的值,语句“b=+a++;”等价于"b=b+a;a=a+l;

17.D

在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类

型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:

从模板实参表(用“V〉”括起来的参数表)或从模板函数实参表(用括起

来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚

拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若

干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中

的实参都被省略了,则空表也可以不要,因此选项D错误。反

之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的

信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有

其他不能省略的实参,则其自身还是不能省略。

18.C

基类中说明的虚函数,在派生类中自然就是虚函数,所以类B中fund

是虚函数;而类A中的func2没有被关键字virtual修饰,所以不是虚

函数。

19.C

Co【解析】应该先做++运算,然后进行%运算,最后比较不等式,

实际上最后输出的结果就是被3除,余数为2的不大于8的数。

20.C

解析:本题考查的知识点是:继承和派生。无论使用哪种继承方式,

派生类中的成员都不能访问基类中的私有成员,而可以访问基类中的

公有成员和保护成员,因此选项A)不正确。在C++中,只有抽象类

不能被实例化,而虚基类不一定非得是抽象类,所以选项B)不正确。

在派生类中可以重新定义从基类继承下来的虚函数,也可以不重新定

义,因此选项D)不正确。故本题应该选择C。

21.A

22.A

Ao本题考查常成员函数的应用。VAC类中说明了两个函数,一个是

常成员函数,一个是普通函数;在主函数中说明了两个对象,通过普

通对象vl调用的是普通函数,输出5;通过常对象V2调用的是常成员

函数,输出3。

23.D

私有继承方式为基类的公用成员和保护成员在派生类中成了私有成

员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成

员,所以基类对象不能赋值给派生类对象。抽象类是指含有纯虚拟函

数的类,所以选项D正确。

24.需求分析需求分析解析:需求分析阶段的工作主要包括需求获取、

需求分析、编写需求规格说明书和需求评审4个方面,产生的主要文档

为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交

流提供方便,直接支持目标软件系统的确认,也可作为控制软件开发进

程的依据。

25.软件开发软件开发

26.break

27.求自然数的阶乘120求自然数的阶乘\r\nl20解析:类CFactorial中

的成员函数CalculateFactorial。实现的功能是:求自然数value的阶乘结

果。

28.1810

29.3

3O.Smith:30DSmith:30D解析:本题考核类与对象的操作。主函数中

定义类person的对象demo,并赋初值(30,'smith)。然后调用成员函数

display。输出赋值结果,即Smitch:30o程序结束时dem。对象的析构函

数被调用,再输出“D”。

31.Base::fun();Base::fun();解析:此题考查的是成员函数的调用。因为横

线处的作用是调用基类的fun函数,又因为派生类中也有fun()函数.所

以必须对fun()函数加以限定,即Base::fun();。

32.Base::fun()Base::fun()解析此题考查的是派生类对基类成员的访问。

本题中派生类Derived覆盖了基类Base中的fun(),如果需要调用基类

中的fun(),则需要使用域运算符故应滇写Base::fun()。

33.33.14。3,3.140解析:C++编译系统将根据实参表中的实参的类型

来确定函数的形参歹J表中的类型。函数fun(3,6)返回的值为3,函数调

用fun(3.14F,6.28F)返回的值为3.14。

34.x.operator-()

35.函数类函数\r\n类解析:函数是程序功能实现的主要方式,是实现

结构化设计(将程序分成若干个函数实现)的基本组成;类是一种用户定

义的类型,是实现数据封装和数据抽象的工具,是面向对象设计中的基

本组成。

36.(1)应改为"assert(sizeof(sl尸=4);

\n(2)应改为"assert(sizeof(s2)=lO);”。

\n(3)应改为"asseit(sizeoRs3)=l);

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正

常执行输出结果,那么assert函数只有为真,才不会产生中断异常。

uassert(sizeof(s1)=3);”语句中“sizeof(sl)==3”为假,这会使程序产生异

常,不能正常执行。因为strl的值为abc,但是它还有一个尾符,它的

长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(sl)==4)了。

str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeoRs2)—10)厂。

charstr3=23;语句说明23是字符,所占存储空间为I,所以修改为

uassert(sizeof(s3)=1);

37.(1)应改为"TC::TC"。

\n(2)应改为"oidTC::display”。

\n(3)应改为“TC::〜TC”。

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名

和作用域运算符“::作用域运算符用采表示某个成员属于哪个类,使

用格式为“(类名)二〈成员函数〉((参数函数)),因此第1处应改为“TC::

TC”,默认构造函数没有参数。由第2处“TC=display”后的语句看,这

是在类外实现TC函数,因此也有作用域运算符使用错误问题,display

函数返回值为void,因此第2处的语句应改为“voidTC:display"。由第

3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函

数是一个特殊的函数,它的名称和类名相同,并在前面加“〜”字符,用

采与构造函数加以区别,因此第3处的语句应改为“TC::〜TC”。

38.(1)应改为“TC::TC”。

(2)应改为"voidTC::display”。

⑶应改为“TC::〜TC”。

【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名

和作用域运算符作用域运算符用采表示某个成员属于哪个

类,使用格式为“(类名)::(成员函数〉((参数函数)),因此第1处应改

为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后

的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错

误问题,display函数返向值为void,因此第2处的语句应改为

“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是

在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名

相同,并在前面加”字符,用采与构造函数加以区别,因此第3处

的语句应改为“TC::〜TC”。

39.(1)应改为"TCobjl⑴;:

(2)应改为"Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个

输出结果两1,所以补全参数1,即第1处的“TCobjl(l):第2处处

的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C+

+中成员函数的使用形式应该是:对象名.成员函数,所以修改为

“objl.SetNumber(lO);类是对象的抽象,而对象是类的具体实

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

这里应该使用定义的对象,即。bj2,所以将语句修改为

“obj2.SetNumber(lOO);

40.(1)应改为"usingnamespacestd;"。

⑵应改为“outl.open(Hl.txt",ios::binaryIios::app);

(3)应改为“outl.put(s[i]);,9o

【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open

中,输入、输出方式是在ios类中定义的,所以open(nl.txtM,

binaryIapp);”语句缺少类ios,即第2处的语句修改为

“outl.open("l.txt",ios::binaryIios::叩p);第3个标识应

该用流成员函数put输出字符,所以第3处的语句修改为

“outl.put(s[i]);

41.(l)"staticintn=O"应改为"staticintn;"。

(2)uintCO::n:”应改为"intCO::n=0:

(3)44cout«c.nvvendl;”应改^44cout«c->n«endl;''。

【解析】本题要在屏幕上输出两个字符,首先要静态变量初始化,第1

处应改为“staticintn;",第2处要给n赋值,第3处输出时引用c的对

象,应改为"cout〈vc->n<<endl;

42.(1)应改为"ein.getline(str,120,?);

(2)应改为"while(str[i])"°

⑶应改为“if(str[i]>=a&&str[i]v=2)”。

【解析】本题中要求以输入字符为结束符,用于字符输入的流成员

函数gelline函数读入一行字符,格式为“cin.gelline(字符数组,字符

个数,终止标志字符)“,所以第1处改为“cin.getline(str,

120,?);第2处的“while(str)”语句应该是判断字符串str中的每一

个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否

为小写,若为小写,则转换。所以应该修改为“while(str[i])''。第3处的

“if(st巾]>=a)»语句是判断字符st币]是否为小写字符,而现有的语句只

是判断字符是否大于a,但是小写字符应该是a到2,所以修改为

44if(str[i]>=a&&str[i]>=z),,o

43.(1)应改为"TCobjl(l);”。

\n(2)应改为“Objl.SetNumber(lO);

\n(3)应改为“0bj2.SelNumber(lOO);"。

\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输

出结果两1,所以补全参数1,即第1处的叮Cobjl(l);工第2处处的

“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中

成员函数的使用形式应该是:对象名.成员函数,所以修改为

4t55

objl.SetNumber(lO);0类是对象的抽象,而对象是类的具体实例。

第3处与(2.$611%1^「(100);"语句中的“2为类,并不是对象,这里

应该使用定义的对象,即obj2,所以将语句修改为

uobj2.SetNumber(lOO);"。

44.(1)应添加“public:»。

\n(2)“inti”应改为“inti(10);”。

\n(3)“i++;”应改为“i-・;工

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:“,否则该类无法被实例

化。变量的初始化可以通过“=''号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次减1,在i>5时循环,故i初始化应为10o若循环中i每次增1,则

循环永远不会退出。

45.(1)应改为"catch(char*s)”。

(2)应改为"cateh(inti)”。

(3)应改为"catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw,error");”,其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)»。第2个标识前的异常抛出语句为

“throw((int)0);”,其中的类型为int。对应的异常捕捉语句c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论