}
24.下面程序实现输出半径为2.5的圆的面积,但输出结果是0,找出原因并提出修改意见。
classpoint{
private:
floatx,y;
public:
floatarea(){return0.0;}
};
constfloatpi=3.14159f;
classcircle:
publicpoint{
private:
floatradius;
public:
voidsetRadius(floatr){radius=r;}
floatarea(){returnpi*radius*radius;}
};
voidmain()
{point*p;
circlec;
c.setRadius(2.5);
p=&c;
cout<<"Theareaofcircleis"<area()<}
25.下面程序中有一处错误,请用下横线标出错误所在行并说明出错原因。
classA{
intx;
friendclassB;
};
classB{};
classC:
publicB{
voidfunc(A*p);
};
voidC:
:
func(A*p)
{p->x--;}
四、完成程序题(本大题共5小题,每小题4分,共20分)
26.为使下列程序输出结果为:
Y=1,Y=3,Z=5
请在横线处填上适当的字句,以使程序完整。
#include
classB{
private:
intY;
public:
B(inty=0){Y=y;}
voidprint(){cout<<"Y="<};
classD:
publicB{
private:
Bb;
intZ;
public:
D(intx,inty,intz):
B(x),b(y){Z=z;}
voidprint(){
①________;//打印基类B中的成员Y
②________;//打印类成员b中的Y值
cout<<"Z="<}
};
voidmain()
{Dd(1,3,5);
d.print();
}
27.在下面横线处填上适当字句,完成求最大值函数模板的定义。
#include
template
TMax(Tx,Ty)
{
return(x>y?
x:
y);
}
①________
TMax(Tx,Ty,Tz)
{
Tt=Max(x,y);
return(②________);
}
voidmain()
{
intx;doubley;
x=Max(5,6);y=Max(12.3,3.4,7.8);
cout<<"x="<}
28.在下面横线处填上适当字句,完成Distance函数的定义。
#include
#include
classPoint
{
private:
doubleX,Y;
public:
Point(doublex=0,doubley=0){X=x;Y=y;}
voidMove(doublex,doubley){X=x;Y=y;}
frienddoubleDistance(Point&p1,Point&p2);//计算两点间距
};
doubleDistance(Point&p1,Point&p2)
{doubledx=①________;
doubledy=②________;
returnsqrt(dx*dx+dy*dy);
}
voidmain()
{
Pointa(1,1);
Pointb(a);
b.Move(4,5);
cout<}
29.为使下列程序输出结果为:
A∷f()
B∷f()
C∷f()
请在横线处填上适当的字句,以使程序完整。
#include
classA{
public:
①________{cout<<"A:
:
f()\n";}
};
classB:
publicA{
public:
voidf(){cout<<"B:
:
f()\n";}
};
classC:
publicA{
public:
voidf(){cout<<"C:
:
f()\n";}
};
voidmain()
{
Aa,②________;
Bb;Cc;
p=&a;p->f();
p=&b;p->f();
p=&c;p->f();
}
30.在下面横线处填上适当字句,完成类成员函数的定义。
#include
classComplex{
private:
floatreal,imag;
public:
Complex(floatr=0,floati=0){real=r;imag=i;}
voidDisplay(){
cout<if(imag>0)cout<<"+"<elseif(imag<0)cout<cout<}
Complexoperator+(Complex&b);
friendComplexoperator-(Complex&a,Complex&b);
};
ComplexComplex:
:
operator+(Complex&b)
{
Complex*t=newComplex(①________);
return*t;
}
Complexoperator-(Complex&a,Complex&b)
{
Complex*t=newComplex(②________);
return*t;
}
voidmain()
{
Complexc1(4.0,5.0),c2(2.0,-5.0),c3;
c3=c1+c2;
c3.Display();
c3=c1-c2;
c3.Display();
}
五、程序分析题(本大题共6小题,每小题5分,共30分)
31.写出下面程序的输出结果。
#include
#include
inti=1;
voidother(void)
{
staticinta=2,b;
intc=10;
a=a+1;i=i+3;c=c+5;
cout<b=a;
}
voidmain(void)
{
staticinta;
intb=-5,c=0;
voidother(void);
cout<<"iabc\n";
cout<c=c+8;other();
cout<i=i+10;other();
}
32.写出下面程序的输出结果。
#include
classA
{
private:
intX,Y;
public:
A(){
X=Y=0;
cout<<"DefaultConstructorcalled."<}
A(intxx,intyy){
X=xx;Y=yy;
cout<<"Constructorcalled."<}
~A(){
cout<<"Destructorcalled."<}
};
voidmain()
{
A*p1=newA;
deletep1;
p1=newA(1,2);
deletep1;
}
33.写出下面程序的输出结果。
#include
classA{
private:
inta;
public:
voidset(intx){a=x;}
voidshow(){cout<<"a="<};
classB:
publicA{
private:
intb;
public:
voidset(intx=0){A:
:
set(x);b=x;}
voidset(intx,inty){A:
:
set(x);b=y;}
voidshow(){A:
:
show();cout<<"b="<
};
voidmain(){
Bb;
b.set(12);b.show();
b.set(34,56);b.show();
}
34.写出下面程序的输出结果。
#include
classA
{
private:
constinta;
staticintb;
public:
A(inti):
a(i),r(a){b++;}
voidprint(){cout<constint&r;
};
intA:
:
b=0;
voidmain()
{Aa1(33);a1.print();
Aa2(44);a2.print();
}
35.写出下面程序的输出结果。
#include
voidmain(void)
{intn=6,k;
cout<for(k=2;kif(n%k==0)
cout<cout<}
36.写出下面程序的输出结果。
#include
classB{
public:
virtualintf(){return0;}
};
classD:
publicB{
public:
intf(){return100;}
};
voidmain(){
Dd;
B&b=d;
cout<cout<:
f()<}