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

下载本文档

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

文档简介

2023年辽宁省鞍山市全国计算机等级考试

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

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

一、1.选择题(10题)

1.以下程序的执行结果是o#include<iostream.h>class

Sample{intx;public:Sample(){);Sample(inta){x=a;)Sample(Samplc

&a){x=a.x+1;}voiddisp(){cout<<"x="<<x<<endl;}}voidmain()

{Samplesi(2),s2(sl);s2.disp();}

A.x=2B.x=3C.x不确定D.x=0

2.下面程序的输出结果为()。#include<iostream.h>class

CStatic{public:CStatic(){val++;}staticintval;};intCStatic::val=0;void

main(){CStaticcsl;cout<<csl.val<<,H,;CStaticcs2;CStaticcs3,

cs4;cout<<csval<<endl;}

A.14B.24C.34D.54

3.以下程序的运行结果是#include<iostream.h>voidsub(intx,inty,int

*z){*z=y-x;}voidmain(){inta,b,c;sub(10,5,&a);sub(7,a,&b);

sub(a,b,&c);coot<<a<<<<b<<<<c<<en

A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-7

4.关于静态数据成员的描述中正确的是()。

A.类的静态数据成员不是类的所有对象共享的数据

B.类的静态数据成员不能被类的成员函数调用

C.类的静态数据成员不能被类的构造函数调用

D.类的静态数据成员必须进行初始化

5.下列描述中哪个是正确的?

A.私有派生的子类无法访问父类的成员

B.类A的私有派生子类的派生类C无法初始化其祖先类A对象的属性,

因为类A的成员对类C是不可访问的

C.私有派生类不能作为基类派生子类

D.私有派生类的所有子孙类将无法继续继承该类的成员

6.下面赋值语句中正确的是

A.a=7+b+c=a+7;

B.a=7+b++=a+7;

C.a=7+b,b++,a+7;

D.a=7+b,c=a+7;

7.最初的计算机编程语言是()。

A.机器语言B.汇编语言C.高级语言D.低级语言

8.有如下数组声明:intnumllO];,下标值弓I用错误的是()。

A.num[10]B.num[5]C.num[3]D.num[0]

9.在C++中,用于实现运行时多态性的是

A.内联函数B.重载函数C.模板函数D.虚函数

10.在单项链表中删除一个指定结点的后继的时间复杂度为O

A.O(n)

B.O(nlog2n)

C.O(l)

D.OM)

二、单选题(13题)

11.设有charstr[80];以下不能将输入数据first\nsecond\n<CR>读取到

数组sir中的语句是

A.cin.get(str,strlen(str));

B.cin.getline(str,strlen(str));

C.cin>>str;

D.cin.read(str,strlen(str));

12.if语句的语法格式可描述为:

格式1:if(〈条件〉)〈语句〉

或格式2:if(〈条件〉)〈语句1>elseV语句2>

关于上面的语法格式,下列表述中错误的是

A.<条件>部分可以是一个if语句,例如if(if(a=O)...)...

B.<语句>部分可以是一个if语句,例如if(…)if(…)…

C.如果在<条件>前加上逻辑非运算符!并交换<语句1>和<语句2>

的位置,语句功能不变

D.<语句>部分可以是一个循环语句,例如if(...)while(.

13.判断char型变量c是否为小写字母的正确表达式是()。

AJa'<=c<='z'

B.(c>=A)&&(c<=z=

C.(*a*>=c)|K'z*<=c)

D.(c>='a')&&(c<=*/)

14.类MyCIass的定义如下:

classMvClass

(

public:

MyCIass(){value=O;}

SetVariable(inti){value=i;}

private:

intvalue;

则对下列语句序列正确的描述是()。

A.语句p=&my;是把对象my赋值给指针变量P

B.语句MyClass*P,my;会调用两次类MyCIass的构造函数

C.对语句*P.SetVariable(5)的调用是正确的

D.语句p->SetVariable(5)与语句my.SetVariable(5)等价

15.有以下程序:

classDate

(

public:

Date(inty,intm,intd);

(

year=Y:

month=m;

day=d;

)

Date(inty=2000)

(

yearly;

month=10;

day=l;

)

Date(Date&d)

(

year=d.year;

month=d.month;

day=d.day;

)

voidprint()

(

cout<<year"<<month<<"."<<day<<endl;

)

private:

intyear,month,day;

Datefun(Dated)

(

Datetemp;

temp=d;

returntemp;

)

intmain()

(

Datedatel(2000,1,1),date2(0,0,0);

Datedate3(datel);

date2=fun(date3);

returnO;

)

程序执行时,Date类的拷贝构造函数被调用的次数是()。

A.2B.3C.4D.5

16.已知函数f的原型是“voidf(int*x,int&y);",变量vl、v2的定义是

"intvl,v2;下列调用语句中,正确的是()。

A.f(vl,v2)B.t(vl,&v2)C.f(&vl,v2)D.f(&vl,&v2);

17.对C++编译器区分重载函数无任何意义的信息是________。

A.参数类型B.参数个数C.返回值类型D.常成员函数关键字const

18.友元运算符objl>obj2被C++编译器解释为()。

A.operator>(obj1,obj2)

B.>(objl,obj2)

C.obj2.operator>(obj1)

D.obj1.operator>(obj2)

19.有如下程序:

#include<iostream>

#include<iomanip>

usingnamespacestd;

intmain(){

cout«setw(10)«setfill(,X,)«setprecision(8)«left;

cout«12.3456793«<<98765;

return0;

)

若程序的输出是12.345679x98765xxxxx,则划线处缺失的部分是

A.setw(lO)B.setfin('X')C.setprecision(8)D.right

20.设有两个字符串p和q,求q在p中首次出现位置的运算称为

()O

A.A.连接B.模式匹配C.求子串D.求串长

21.下列程序的运行结果是()。

#include<iostream.h>

classA

(

inta;

public:

A(a=O;}

A(intaA.

(

a=aa;

cout«a++:

)

};

voidmain

(

AX,Y(2),z(3);

cout«end

A.00B.23C.34D.25

22.下面是重载为非成员函数的运算符函数原型,其中错误的是

A.Fractionoperator+(Fraction,Fraction);

B.Fractionoperator-(Fraction);

C.Fraction&perator=(Fraction&,Fraction);

D.Fraction&operator+=(Fraction&,Fraction);

23.设int&max(int&,int&)返回两参数中较大者,如有两整型变量inta=5;int

b=10;在执行max(a,b)++后,a,b的值分别为

A.5,10B.6,10C.5,11D.6.11

三、2.填空题(12题)

24.在关系模型中,把数据看成一个二维表,每一个二维表称为一个【

25.继承与【】机制,是面向对象程序中实现重用的主要手段。

26.设inta=10,b=l1,c=12;,表达式(a/b)<c&&b==c的值是[]o

27.已知:doubleA(doubleA){return++a;}和intA(inA){retum++a;}

是一个函数模板的两个实例,则该函数模板定义为【】

28.请定义一个函数名为A,返回值为int,没有参数的纯虚函数的定义

是【】。

29.在程序设计阶段应该采取【】和逐步求精的方法,把一个模块的功

能逐步分解,细化为一系列具体的步骤,进而用某种程序设计语言写成

程序。

30.[]是指反映数据元素之间逻辑关系的数据结构。

31.以下程序的执行结果是_____。

#include<iostream.h>

classA

(

inta;

public:

voidseta(intx){a=x;}

voidshowa(){cout<<a<<endl;}

);

classB

(

intb;

public:

voidsetb(intx){b=x;}

voidshowb(){cout<<b<<endl:}

);

classC:publicA,privateB

(

private:

intc;

public:

voidsetc(intx,inly,intz)

(

c=z;

seta(x);

setb(y);

)

voidshowc(){cout<<c<<endl;}

voidmain()

Cc;

C.seta(1);

C.showa();

C.setc(1,2,3);

C.showc();

)

32.运算符重载仍然保持其原来的优先级、和_

33.执行以下程序后,输出结果第二行的内容是____

#include<iostream>

usingnamespacestd;

classTestClass

(

public:

virtualvoidwho(){cout<<"BaseClass"<<endl;}

};

classTestClasskpublicTestClass

(

public:

virtualvoidwho(){cout<<"TestClass1Class"<<endl;}

);

classTestClass2:publicTestClass

(

public:

virtualvoidwho(){cout<<"TestClass2Class"<<endl;}

);

intmain(intargc,cha产argv[])

(

TestClassobj1,*p;

TestClass1obj2;

TestClass2obj3;

P=&obj1;p->who();

p=&obj2;p->who();

p=&obj3;p->who();

return0:

)

34.开发一个C++语言程序的步骤通常包括编辑、【]、链接、运行和调

试。

35.下列程序不能通过编译,应该在划线部分填写的语句是[]o

#include<iostream,h>

#include<stdlib.h>

doubleFune(inta,intb,charch)

(

doublex;

switch(ch)

(

case

x=double(a)+b;

break;

case

x=double(a)-b;

break;

case/:

x=double(a)*b;

break;

case7:

if(B)x=double(a)/b;

else

exit(1)

break

default:

exit(l);

)

voidmain()

(

cout<<Func(32,6:--)<<

cout<<Func(32,6<<"J;

cout<<Func(32,6<<endl;

)

四、程序改错题(10题)

36.使用VC++6,0打开考生文件夹下的源程序文件1.cppo本程序要

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[120J;

cout«"Enterastringendwith?.n«endl;

I不不不不不不不不error不不不不不不予不

cin.getline(str,120);

////小小小小小小小小prmr■不的不不不予*1«不■的不小»1«

while(str)

小*1*小*1*小»1*小*1*小*1*小*1*小*1*小»!•error不不*不A»不«£•不•4*不*A»予*A»不*!•

if(str[ij)=a)

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

i++;

}

cout«str«endl;

return;

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

try

throw("errorH);

/*不******prrcr不不予**不亭不

catch(chars)

(

cout«s«endl;

try

(

throw((int)0);

)

、J**2*KJ*

*r不不不不不不*rerror干不干干干干干干

catch

(

cout«i«endl;

1

try

(

throw(O):

throw("en'orH);

)

1«x*

//*<**i**i**i**i**r*r*i'prror'•、不’’*不不

catch

cout«nERRORH«endl;

returnO;

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

/小小小小小小error不小不不不不

voidmain

不不不不不不error不干不不不不

intm=0142:

g

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

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

(

public:

staticintn=O:

CO

(

n++:

)

〜CO

)

):

f

不不不举不汴不不prp()r**不•・、***/

intCO::n;

voidmain

COobj;

COobj2[7];

COCNULL:

c=&obj:

不不不不*不**en*cr不不不不不不不"/

eout«C.n«endl;

cout«C0::n«endl;

)

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

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

为:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl=HabcH:

/1.触

//不不不不不不不不error,'不不不不不予不

assert(sizeof(s1)==3):

cout«"sizeof(sl)=5"«endl;

chars2[10]="abM:

assert(sizeof(s2)==2);

cout«nsizeof(s2)=10"«endl;

chars3=23:

//■口•!«

//不不不不不不不不Frmr不不可不不不不不

assert(sizeof(s3)==4);

cout«"sizeof(s3)=l"«endl;

return;

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

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

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

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

构,错误的语句在

//******cn*or******的下".面。

试题程序:

#include<iostream>

#include<fstream>

/*i>*1^

//*不******prrcr不不予**不亭不

usingstd;

voidWriteFile(char*s)

ofstreamout1;

/*1**1»*3**4**4**3**1*

//小小不不不小小不prmr不不不不不不不不

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

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

!«>1•«>1•

//不小小下不小小小prrcr不不不不不不予不

outl.puts(s[i]);

outl.close;

voidClearFile

ofstreamout1;

outl.open(Ml.txt");

outl.close;

intmain

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

1

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error”);

)

//

/*r*i**i**i**i**r*r*r不不■・、■•、不,・•不

catch(chars)

cout«s«endl;

try

(

throw((int)0);

1

/*1**1**y*

//不小不不不不不不prmr不不不不不不不不

catch

{

cout«i«endl;

)

try

(

throw(O);

throw("error”);

*1*7*7*7*7*7**£*7*7**£**£*7*

不不不不不不不不error不不不不干不予不

catch

(

cout«,'ERROR',«endl;

)

returnO;

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

);

//•,・*5*

//不不不不不不p[Tcr不不不不不不

TC:TC

cout«nConstructorn«n

i=0;

)

/l

//汴不汴汴汴*prmr不举举不举不

TC:display

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

TC:TC

COUI«,,Destructor"«endl:

)

voidmain

TCa;

a.display;

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

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

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

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

构,错误的语句在

!1******error******卜博

试题程序:

#include<iostream>

#include<fstream>

//■口

//不不不不不不不不Frmr不不可不不不不不

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

//■,、■,、■,、■,、■,、.j..[、.卜errorrjwrj»*2**3*

outl.open("l.txt",binarylapp);

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

********error*2*

outl.puts(s[i]);

outl.close;

voidClearFile

ofstreamout1;

outl.open(Ml.txt'1);

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«Hpleaseinputiistrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

number=i;

1

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«,'number=,'«number«endl;

)

private:

intnumber;

voidmain

/1.的.触

//不不不*不不不不error,'不不不不不予不

TCobjl;

objl.Print;

TCobj2(3);

objl.number=10;

II********err0[*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

1

五、综合应用题(2题)

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

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

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

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

整。

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

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

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

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

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

他的程序代码。

试题程序:

#include<iostream.h>

classPeople

(

public:

//i*1*•»I*1■4、

inti;

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

{m_UserName[i]=sUserName[i];

)

/•>1**1**1**1**1*»1*“,、[,»1**1*«1**1**1**1*

//木本木木小小小小2小小"卜小小小

m_Old=nOld;

private:

charm_UserName[32];

intm_Old;

II********3********

);

voidfun(char*s,People&person!,People&person2

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

if

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

+)

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

s[i+l]=0;

else

for(inti=0;pcrson2.m_UscrNamc[i]!=0;i+

+)

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

s[i+l]=O;

1

)

)

voidmain

(

charsL32J;

Peoplepl(Mabcn,20);

Peoplep2(ndef,30):

fun(S,pl,p2);

cout«s«endl:

return;

)

47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件

proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序

proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存

放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并

输出到文件out.dat中。文件in.dat的长度不大于1000字节。

要求:

补充编制的内容写在“〃**********“与“〃**********“两行之间。实现

将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得

修改程序的其他部分。

注意:程序最后已将结果输出到文件Out.dat中,输出函数

writeToFile已经给出并且调用。

//proj3.cpp

#include<iostream>

#include<fstream>

#include<catting>

usingnamespacestd;

classdoc

(

private:

char*sir;//文本字符串首地址

intlength;〃文本字符个数

public:

〃构造函数,读取文件内容,用于初始化新对象,filename是文件名字

符串首地址

doc(char*filename);

voidreverse;〃将字符序列反转

一doc;

voidwriteToFile(char*filename);

};

doc::doc(char}filename)

ifstreammyFile(filename);

intlen=1001,tmp;

atr=newcharf1en];

length=O;

while((trap=myFile.get)!=EOF)

str[length++]=trap;

str[length]=t\O,;

myFile.close;

voiddoc::reverse)

//将数组atr中的length个字符中的第一个字符与最后一个字符交换,

第二个字符与倒数第二个

〃字符交换

/*1**1*%!*%!**1*•!*%!*%!*%!*

1I*.»*•»*.»444,1»*.»*.»■/、*,»«*»*j、«.»

//*!**1**1**1**1**1**!**1**1*///•1**1**!**!**1**1**1**1**1**1**1*»!*

//*l**T**4**T**T*****T**l**T**T**T**T**T**»*个个个个个个个个个个个个

doc::~doe

delete[]str;

voiddoc::writeToFile(char*filename)

OfstrcamoutFilc(filcnamc);

outFile«str;

outFile.close;

1

voidmain

(

docmyDoc("in.dat");

myDoc.reveme;

myDoc.writcToFilcf'out.dat");

}

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

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

序文件tesOO_3.cpp,其中定义了用于表示复数的类comp,但类comp的

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

⑴定义comp的构造函数,函数含参数x和y,它们都是in,型的数据,

默认值都为0,请使用参数列表的形式分别将类数据成员a和b初始化

x和y的值。请在注释“〃之后添加适当的语句。

(2)完成类comp的成员函数input(intx,inty)的定义,将int型的参数x和

y分别赋值给数据成员s和b,请在注释“〃**2**”之后添加适当的语句;

(3)完成类comp的友元函数friendcompplus(comp&x,comp&y)的定义,

该函数首先要定义一个comp类的对象c,然后将参数x和y的数据成

员a与b分别相加并分别赋值给c的成员a和b,最后返回c的值,请

在注释“〃**3**”之后添加适当的语句。输出结果如下:

10+20i

2+3i

result:12+23i

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

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

#include<iostream.h>

classcomp

inta;

intb;

public:

friendcompplus(comp&x,comp&y);

voidinput(intx,inty)

(

)

voidoutput()

(

cout<<a<<*+'<<b<<"i"<<endl;

)

};

compplus(comp&x,comp&y)

(

c.b=x.b+y.b;

returnc;

}

voidmain()

(

compx(10,20),y,z;

y.input(2,3);

z=plus(x,y);

x.output();

y.output();

cout<<"result:";

z.output();

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

testll_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按

要求完成下列操作,将类CPosition的定义补充完整。

(1)在类定义外完成重载的两个构造函数CPosition。和CPosition(double

dx,doubledy),其中前者为不带参数的构造函数,使CPosition对象的

默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分

别初始化为参数dx和dy的值。请在注释“〃**1**”之后添加适当的语句。

(2)在类体中添加函数move(doubleax,doubleay)的定义,使得点的坐标

x和y分别移动ax和ay个单位,请在注释“〃**2**"之后添加适当的语

句。

(3)完成函数doubledistance(doublebx,doubleby)的定义,该函数返回

*this和点(bx,by)的距离,请在注释“〃**3**”之后添加适当的语句。

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

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

#include<iostream.h>

#include<math.h>

classCPosition

(

public:

CPosition();

CPosition(doubledx,doubledy);

doublegetx();

doublegety();

H**2**

doubledistance(doublebx,doubleby);

private:

doublex;

doubley;

);

H**j**

(

x=0;y=0;

)

CPosition::CPosition(doubledx,doubledy)

(

x=dx;y=dy;

)

doubleCPosition::getx()

(

returnx;

)

doubleCPosition::gety()

(

returny;

)

doubleCPosition::distance(doublebx,doubleby)

voidmain()

doublea,b;

cout<<"Inputx,ypositionofapoint:n;

cin>>a>>b;

CPositionpsA(a,b);

cout<<"Inputx,ypositionofanotherpoint:";

cin>>a>>b;

cout<<nThedistanceisn<<psA.distance(a,b)<<endl;

)

参考答案

l.B

2.A

3.B解析:在C++语言中,调用函数不可能改变实参指针变量的值,但

可以改变实参指针变量所指变量的值。了解了实参指针变量的改变情况,

本题只剩下简单的“加减法”了。

4.D解析:C++类中的静态成员变量是该类中所有对象所共有的,它

能够被类中的任何函数调用,所以选项A)、选项B)、选项C)是错误

的。而类的静态数据成员是必须要进行初始化才能使用的。

5.B解析:C++语言中一个派生类能不能继承基类的所有数据成员受继

承方式的限制。

6.D解析:赋值语句合法的重要标志之一就是赋值符号的左侧应该表示

为一个变量,即可以在内存中存在一块空间用于存放赋值符号右侧的值。

据此,可以断定选项A和B可以排除。注意;选项C中不是逗号表达

式,要考虑优先级的问题。本题答案为Do

7.A计算机编程语言有三类,机器语言,汇编语言,高级语言。最初的

编程语言是机器语言。

8.AA。【解析】数组定义中的数字指的是数组的大小,而下标是从。开

始的,所以数组的最后一个元素是num[9]0

9.D解析:本题考核虚函数的概念。在C++语言中,多态性可分为两类:

编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和

模板体现。其实现机制称为静态联编(也译为静态绑定),即在编译阶段

决定执行哪个同名的被调用函数;运行时的多态性是通过体现的,其实

现机制称为动态联编(也译为动态绑定),即在编译阶段不能决定执行哪

个同名的被调用函数,只在执行阶段才能依据要处理的对象类型来决定

执行哪个类的成员函数,用于实现此功能正是虚函数。

10.A

H.B解析:本题考察C++中输入输出流对象的一些常用成员函数的用

法。其中get和getline的区别在于getline读取中以Nn作为输入结束符。

故本题中getline只能接收第一个换行符之前的字符,即first。后面的字

符被丢弃。因此正确答案应为B。

12.A

解析:本题考查的是if语句。if语句的条件部分是一个表达式而不是

语句,因此选项A的说法不正确。

13.D

字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写

字母在ASCII码表中都是连续的。大写字母A〜z是从65〜90,小写

字母a〜z是从97〜122。所以只要变量c大于等于a并月小于等于z

就能保证其为小写字母。

14.D

Do【解析】选项A,语句P=&rny;是把对象my的地址值赋值给指

针变量P;选项B,语句MyClass*P,my;中由于P只是一个指向对

象的指针,因此定义指针P不调用构造函数,所以此语句只调用一次

构造函数:对成员函数的引用可以通过两种形式:指针一〉成员函数

(形参表),或者对象名.成语函数名(形参表),故选项C错误,选项D

正确。

15.B

Bo【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数一共

被调用了3次:第1次是在执行语句Datedate3(datel)时,用已经建立

的对象datel对正在建立的对象date3进行初始化;第2次是在调用

fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进

行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系

统初始化一个匿名对象时使用了拷贝构造函数。

16.B

Bo【解析】voidf(int*X,int&。y);第一个参数需要取值,第二个参

数需要取地址,所以为vl为取值,&Lv2为取址。

17.C

本题主要考查了函数重载。进行函数重载时,要求同名函数在参数个

数上不同,或者参数类型上不同,不可以根据函数返回值类型来重我

函数;const关键字可以用于参与对重载函数的区分。因此对C++编译器

区分重载函数无任何意义的信息是返回值类型。

18.A

19.A

C++中,setw()用来控制输出间隔。

20.BB。【解析】字串的定位操作通常称为串的模式匹配,是各种串处理

系统中最重要的操作之一。

21.B

本题考查的是对构造函数的掌握,另外运算符是右结合的,所以

在进行输出的时候都是先把原来的输出后再自加lo

22.C

解析:本题考查的知识点是运算符重载。C++中规定,“=”运算符只能

作为成员函数重载,故本题的选项C是错误的。

23.C

考点:本题主要考查知识点为引用作为函数参数透析:执行

max(a,b)++后,函数返回变量b后加1,即b=l1.因为函数参数采用的

引用方式,使用改变的是实参变量b的值。

24.关系关系解析:在关系模型中,把数据看成一个二维表,每一个二

维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个

数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于

记录值。

25.多态性多态性

26.0

27.template<typenameT>TA(TA){returna++)template<typenameT>

\r\nTA(TA){returna++,)解析:本题考核函数模板的定义。通过两个实

例知道该例中只有一种数据类型,所以在定义模板时只需定义一个模板

参数T。

28.virtualintA()=0;virtualintA()=0;解析:C++语言中的纯虚函数是

一种特殊的函数,它没有自己的定义,只有声明,纯虚函数与虚函数声

明的不同就在于在函数后面加上了“=0”。

29.自顶而下自顶而下

30.数据的逻辑结构数据的逻辑结构解析:本题考查数据的逻辑结构的

概念,数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。逻

辑关系是指数据元素之间的前后间关系。

31.13

32.结合性语法结构结合性语法结构

33.TestClasslClassTestClasslClass解析:TestClass为基类,TestClassl

和TestClass2都是TestClass的派生类。本题从main主函数入手,首先

定义了TestClass类型的对象obj1和指针p,然后又分别定义了TestClass1

和TestClass2的对象obj2和obj3。指针分别指向对象obj1、obj2和obj3,

然后分别调用其成员函数who(),分别输出:“BaseClass",“TestClassl

Class","TestClass2Class”。

34.编译编译解析:C++语言是以编译方式实现的高级语言,C++语言

程序的实现,必须要使用某种C++语言的编译器对程序进行编译。

35.returnx;returnx;解析:本题函数声明时指定了函数的返回值为

double,因此在函数体中必须存在一个return语句。

36.(1)应改为“ein.getline(str,120,?);”。

\n⑵应改为"while(str[i])"°

\n(3)应改为“if(str[i]〉=a&&str[i]v=2)”。

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

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

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

2处的“whilc(str)”语句应该是判断字符串str中的每一个字符是否为结

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

则转换。所以应该修改为“while(str[i])”°第3处的“if(str[i]>=a)”语句是

判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于a,

但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。

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

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

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

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

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

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

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

u

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

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修

改为“catch(…)”。

38.(l)“voidmairT。

(2)“intm=0144;

(3)“intn=OX25;”或“intn==0x25;

【解析】本题主要考查了主函数定义及基同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因此2和3应分别改成“intm=0144;”,

“intn=0x25;”或"intn=0x25;

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

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

(3)<4cout«c.n«endl;”应改^J<4cout«c->n«endl;"。

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

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

象,应改为“cout«c->nvVendl;

40.(1)应改为"assert(sizeof(sl尸=4);”。

\n⑵应改为"assert(sizeof(s2)=lO);

\n(3)应改为"assert(sizeof(s3)=l);"。

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

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

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

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

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

str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。

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

44assert(sizeof(s3)=1);

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

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

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

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

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

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

中,输入、输出方式是在ios类中定义的,所以“outl.open(Ml.txf,

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

44outl.open(Hl.txt",ios::binaryIios::app);第3个标识应

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

“outl.put(s[i]);

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

⑵应改为“cateh(inti)”。

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

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

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

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

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

44throw((int)0);",其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修

改为“catch

43.⑴应改为“TC::TC”。

\n⑵应改为"voidTC::display”。

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

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

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

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

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

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

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

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

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

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

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

\n(2)应改为“outl.open,1.txt',ios::binary|ios::app);"。

\n(3)应改为“outl.put(s[i]);”。

\n【解析】本题第1处的“usingstd广是在程序中弓I入标准命名空间std,

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

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

输入、输出方式是在ios类中定义的,所以“out1.open,1.txt:binar

温馨提示

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

评论

0/150

提交评论