402096C++程序设计习题集.docx

上传人:b****0 文档编号:25854074 上传时间:2023-06-16 格式:DOCX 页数:39 大小:25.38KB
下载 相关 举报
402096C++程序设计习题集.docx_第1页
第1页 / 共39页
402096C++程序设计习题集.docx_第2页
第2页 / 共39页
402096C++程序设计习题集.docx_第3页
第3页 / 共39页
402096C++程序设计习题集.docx_第4页
第4页 / 共39页
402096C++程序设计习题集.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

402096C++程序设计习题集.docx

《402096C++程序设计习题集.docx》由会员分享,可在线阅读,更多相关《402096C++程序设计习题集.docx(39页珍藏版)》请在冰豆网上搜索。

402096C++程序设计习题集.docx

402096C++程序设计习题集

402-096-C++程序设计习题集

上机题:

先定义“高度”类Hight和“圆”类Circle,再由Hight和Circle多重派生出“圆柱体”类Cylinder。

在主函数中定义一个圆柱体对象,调用成员函数求出圆柱体的体积和表面积。

第一部分:

一(选择填空题

1(类成员缺省的访问特征是_C_,结构体缺省的访问权限是__B_.

A.protectedB.publicC.privateD.friend

2(下列关于类的成员的访问特征的描述中,正确的___

A.必须首先说明具有私有特征的成员

B.数据成员必须说明成私有的,成员函数必须说明成私有的

C.每个成员前都必须有标明访问特性的关键字

D.在同一类中,说明访问特性的关键字可以多次使用

3(关于类和对象,下列说法不正确的是___

A.类与对象的关系类似于数据类型与变量的关系

B.对象是类的一个实例

C.任何一个对象必定属于一个特定的类

D.一个类只能有一个对象

4(关于类的一个成员函数,下列说法中正确的是()

A.必须在类内定义B.一定是内联函数

C.不可以重载D.可以设置参数的缺省植

5(以下不可以作为类的成员的是()

A.自身类对象的指针B.自身类的对象

C.自身类对象的引用D.另一个类对象的引用6(已知一个类,类名为A,可以定义A类的对象或定义A类的指针,下列

一定不正确的形式为____

A.Aa1B.Aa2(16)

C.AA3()D.A*P=newA

7.已知一个类COMPLEX,有下述两行:

Complexc;//A

Complexc()//B

以下描述中错误的是___

A.A行定义了一个对象,并调用缺省的构造函数

B.B行定义了一个对象,并调用缺省的构造函数

C.B行是一个函数的原型说明,函数名为C,函数没有参数,返回值

类型是Complex

D.A行和B行两行的意义不一样

8.设有下列对象定义;

classA

{

public:

inta,b;

}a1={1,2},a2,a3;

class

{

public:

inta,b;

}a4;

则以下正确的定义或赋值形式是___

A.a3=a2=a1;B.a4=a1;C.A*p=&a4;D.A&re=a4

9.下列描述中,___不是构造函数的特征

A.构造函数可以重载

B.必须显示为类定义一个构造函数

C.无须为构造函数指定返回值类型

D.构造函数在产生对象时由系统自己调用

10.下列有关析构函数的描述中,正确的是___A.析构函数的定义只能在类体内

B.析构函数可以有一个或多个参数

C.析构函数是在撤消对象时,系统自动调用的D.析构函数可以重载

11.以下关于构造函数和析构函数的描述中错误的是___

A.用户不定义缺省的构造函数,则系统自动生成一个缺省的构造函数

B.若用户不定义拷贝的构造函数,则系统自动生成一个拷贝的构造函数

C.若用户不定义析构函数,则系统自动生成一个析构函数

D.以上A错误,而B,C正确

12.定义复数类如下;

classComplex

{doublereal,image;

public:

Complex(doubler=0,doublei=0){real=r;image=i;}

Complex(Complex&c){real=c.real;image=c.image;}

};

若有Complexc1;//A

Complexc2(3,5);//B

Complexc3(c2);//C

c2=c1;//D则下列描述中正确的是___

A.C行和D行均调用了拷贝构造函数

B.C行调用了拷贝构造函数

C.B行调用了拷贝构造函数

D.A行调用了拷贝构造函数

13.classA

{intx,inty;

public;

A(inta,intb){x=a;y=b;}

voidshow(){cout<

?

<

voidset(inta,intb){x=a;y=b;}

};

voidmain()

{Aobj;

obj.set(3,5);

obj.show();

}

对上述过程段,以下说法中,正确的是___A.编译时报错,程序无法运行

B.编译时无错,运行正常,输出3,5C.编译无错,运行时报错

D.编译时报警告错,但运行正常,输出3,5

14(在下列程序中,C类的数据成员中有一个A类对象和一个B类对象。

#includeclassA

{inta;

public:

A(intx=10){a=x;}

intGetA(){returna;}

};

classB

{intb;

public:

B(intx){b=x;}

intGetB(){returnb;}

};

classC{

intc;

Aaobj;

Bbobj;

public:

C(intx,inty,intz):

aobj(y),bobj(z)//E

{c=x;}

voidPrint()

{cout<

\t?

<

\t?

<

};

voidmain()

{

Ccobj(3,6,8);

cobj.Print();

}

程序在E行定义了构造函数,如果将该行改为下列中______选项

时,便会出现编译错误。

A.C(intx,inty,intz):

aobj(z),bobj(y)

B.C(intx,inty,intz):

bobj(z)

C.C(intx,inty,intz):

aobj(y)

D.C(intx,inty,intz):

aobj(x),bobj(y+z)

二(找错,运行结果

1.指出下列程序的错误:

#include

classA

{intx,y;

public:

A(){x=y=0;}

A(inti=0,intj=0){x=i,y=j;}

voidshow(){cout<

?

<

};

voidmain()

{

Aa1,a2(6,8);错误:

//该程序有两个默认的构造函数

a1.show();

a2.show();

}

2.写出下列程序的运行结果:

#include

classA

{intx,y;

public:

A(){x=y=0;cout<<”Defaultconstructorcalled.\n;}

A(inti,intj)

{x=i,y=jcout<

~A(){show();cout<<”Destructorcalled.\n”;}

voidshow(){cout<

?

<

};

voidmain()

{Aa1,a2(6,8);

a1.show();

a2.show();

}

Defaultconstructorcalled.

constructorcalled.

0,0

6,8

6,8

Destructorcalled.

0,0

Destructorcalled.

3.根据以下两个方框中的内容,写出两个版本的运行结果:

#include

classA

{intx,y;

public:

A(inti=0,intj=0)

{x=i;y=j;

show();

cout<<”Constructorcalled.\n”;

}

A(A&a);

~A(){show();cout<<”Destructorcalled.\n”;}

voidset(inti=0,intj=0){x=i;y=j;}

voidshow(){cout<

?

<

?

;}

};

A:

:

A(A&a)

{x=a.x;y=a.y;show();cout<<”Copyconstructorcalled.\n”;}

A&fun(A&a)Afun(Aa)

{a.show();{a.show();

cout<

a.set(3,7);a.set(3,7);

returna;returna;

}}

voidmain()

{Aa1,a2(6,8),a3(a2),a4;

a4=fun(a3);

a4.Show();

a3.Show();

cout<

}

左边的答案:

0,0,Constructorcalled.6,8,Constructorcalled.6,8,Copyconstructorcalled.0,0,Constructorcalled.6,8,Copyconstructorcalled.6,8,

3,7,Copyconstructorcalled.3,7,Destructorcalled.3,7,Destructorcalled.3,7,6,8,

3,7,Destructorcalled.6,8,Destructorcalled.6,8,Destructorcalled.0,0,Destructorcalled.右边的答案:

0,0,Constructorcalled.6,8,Constructorcalled.6,8,Copyconstructorcalled.0,0,Constructorcalled.6,8,

3,7,3,7,

3,7,Destructorcalled.3,7,Destructorcalled.6,8,Destructorcalled.0,0,Destructorcalled.4.写出下列程序的运行结果

includeclassA

{intx,y;

public:

A(inti=0,intj=0)

{x=i,y=j;Show();cout<<”constructorcalled.\n”}

~A(){Show();cout<<”destructorcalled.\n”;}

voidSet(inti=0,intj=0){x=i,y=j;}

voidShow(){cout<

?

<

A&fun(A&a){a.Show();

cout<

a.Set(3,7);

returna;}

voidmain(){Aa1,a2(6,8),a3(a2),a4=a1;

a4=fun(a3);

a4.show();

cout<

}

0,0,constructorcalled.6,8,constructorcalled.6,8,

3,7,

3,7,destructorcalled.3,7,destructorcalled.6,8,destructorcalled.0,0,destructorcalled.5.写出下列程序的运行结果

#includeclassComplex

{intreal,image;public:

Complex(intx=0,inty=0){real=x;image=y;

Show();

cout<<”construct\n”;

}

~Complex()

{Show();cout<

destruct\n.”;}

voidShow()

{cout<

(„<

?

<

)?

;}voidPrint()

{Show();cout<

voidmain()

{Complexc[5]={3,Complex(4),Complex(),Complex(5,6)};

for(inti=0;i<5;i++)c[i].Print();

cout<<”exitmain()\n”;

}

(3,0)construct

(4,0)construct

(0,0)construct

(5,6)construct

(0,0)construct

(3,0)

(4,0)

(0,0)

(5,6)

(0,0)

exitmain()

(0,0)destruct

.(5,6)destruct

.(0,0)destruct

.(4,0)destruct

.(3,0)destruct

6(写出下列程序的运行结果

#include

classTest

{intx;

public:

Test(inti=0){x=i;}voidprint()

{cout<

.?

<

voidmain()

{Testt1(8),t2(9);

cout<<&t1<

?

<<&t2<

t1.print();//B

t2print();//C

}

若A行的输出是0x0012FF7C,0X0012FF78,则B行和C行的输出是_8.0012FF7C,9_.0X0012FF78_______________________

7.写出下列程序的运行结果

#includeclassList

{

inta[10],n;

public:

List(inta[10],intn){

List:

:

n=n;//List:

:

n表示数据成员n,以便与参数n区别

for(inti=0;i

List:

:

a[i]=a[i];}

voidCopy(ListL){if(this==&L)

cout<<”same1notcopy!

\n”;

else

{n=L.n;

for(inti=0;i

a[i]=L.a[i];

cout<<”different!

copied!

\n”;

}

}

voidShow()

{for(inti=0;i

.?

;

cout<

}

};

voidmain()

{inta1[10]={1,2,3,},a2[10]={4,5,6,7,8};

ListL1(a1,3),L2(a2,5);

L1.Show();L2.Show();

L2.Copy(L1);

L1.Show();

L2.Show();

L1.Copy(L1);

L2.Copy(L2);

L1.Show();

L2.Show();

}

1.2.3

4.5.6.7.8

different!

copied!

1.2.3

1.2.3

different!

copied!

different!

copied!

1.2.3

1.2.3

第二部分:

1.下列各函数,_____不是类成员函数

A.构造函数B.析构函数

C.友员函数D.拷贝初始化函数2.下列有关静态数据成员的描述中.____是错误的

A.说明静态数据成员时,前面要加修饰符static

B.静态数据成员要在类体外进行初始化

C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域

运算符

D.静态数据成员不是所属类的所有对象共有的3.以下关于友员函数的描述错误的是___

A.友员函数不是成员函数

B.友员函数加强了类的封装性

C.友员函数可以访问所属类的私有成员

D.友员函数的作用是提高程序的运行效率4.关于成员函数特征的下列描述中错误的是___

A.成员函数一定是内联函数

B.成员函数可以重载

C.成员函数可以设置参数的缺省值

D.成员函数可以是静态的

5.写出以下程序的运行结果

#include

classCount

{

staticintcount;

public:

Count(){count++;cout<

staticintGetC(){returncount;}

~Count(){count--;cout<

};

intCount:

:

count;

voidmain()

{

Countc1,c2,c3,c4;

cout<

:

Getc()<

cout<<”exitmain\n”;

}

1234

4

exitmain

3210

题8.分析以下程序执行的结果

#includeclassSample

{

intA;

staticintB;

public:

Sample(inta){A=a,B+=a;}staticvoidfunc(Samples);};

voidSample:

:

func(Samples){

cout<<"A="<

intSample:

:

B=0;

voidmain()

{

Samples1

(2),s2(5);

Sample:

:

func(s1);

Sample:

:

func(s2);

}

解:

本题说明了静态成员函数的使用方法。

其中的数据成员B是静态数据成员,求B之值

是在构造函数中进行的。

所以输出为:

A=2,B=7

A=5,B=7

注意:

静态成员函数与静态数据成员一样,也不是对象成员。

静态成员函数的调用不同于普通的成员函数。

在静态成员函数的实现中,引用类的非静态数据成员是通过对象进行的,如本题中s.A,引用类的静态数据成员是直接进行的,如本题中的B。

#include

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inta,intb){x=a;y=b;}voiddisp()

{

cout<<"x="<

};

voidmain()

{

Samples1,s2(1,2),s3(10,20);Sample*pa[3]={&s1,&s2,&s3};for(inti=0;i<3;i++)

pa[i]->disp();

}

解:

本题说明对象指针数组赋初值方法。

定义三个对象和一个对象指针数组,通过赋初值使后者的元素分别指向前面三个对象,然后使用for语句循环调用各个对象的disp()成员函数。

所以输出为:

x=0,y=0

x=1,y=2

x=10,y=20

题7.分析以下程序的执行结果

#include

classSample

{

intn;

staticintsum;

public:

Sample(intx){n=x;}

voidadd(){sum+=n;}

voiddisp()

{

cout<<"n="<

};

intSample:

:

sum=0;//静态数据成员赋初值

voidmain()

{

Samplea

(2),b(3),c(5);

a.add();

a.disp();

b.add();

b.disp();

c.add();

c.disp();

}

解:

本题说明静态数据成员的使用方法。

在类中定义了一个静态数据成员sum,在main()之前给它赋初值0,然后在main()中定义了三个对象,并执行各自的add()和disp()方法。

所以输出为:

n=2,sum=2

n=3,sum=5

n=5,sum=10

注意:

静态数据成员脱离具体的对象独立存在,其存储单元不是任何对象存储空间的一部分,但逻辑上所有对象都共享这一存储单元,对静态数据成员的任何操作都会访问这一存储单元,从而影响这一存储单元的所有对象。

所以说静态数据成员不是对

象成员,在引用时不需要用对象名。

03.编写程序,调用传递引用的参数,实现两个字符串变量的交换。

例如开始:

char*ap="hello";

char*bp="howareyou?

";交换的结果使得ap和bp指向的内容分别为:

ap:

"howareyou?

"bp:

"hello"

解:

本题使用引用调用(实现由于字符串指针本身就是地址,这里可不使用引用参数,效果是一样的)。

程序如下:

#include#includevoidswap(char*&x,char*&y)//引用作为参数{

char*temp;

temp=x;x=y;y=temp;}

voidmain()

{

char*ap="hello";

char*bp="howareyou?

";cout<<"ap:

"<

"<

cout<<"swapap,bp"<

"<

"<

本程序的执行结果如下:

ap

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1