C期末复习程序分析.docx
《C期末复习程序分析.docx》由会员分享,可在线阅读,更多相关《C期末复习程序分析.docx(27页珍藏版)》请在冰豆网上搜索。
C期末复习程序分析
C++期末复习(程序分析题)
一、程序改错题
1、指出下面程序段中的错误,并说明出错原因。
classA
{inta,b;
public:
A(intaa,intbb){a=aa;b=bb;}
};
voidmain()
{Ax(2,3),y(4);}
答:
Ax(2,3),y(4);语句出错,因为没有单参数的构造函数(或者y(4)少写了一个参数)。
2、指出并改正下面利用类模板的对象定义中的错误。
template
classTany
{
Tx,y;
public:
Tany(Ta,Tb){x=a,y=b;}
Tsum(){returnx+y;}
};
voidmain()
{Tany(int)obj(10,100);}
答:
Tany(int)obj(10,100);出错,应为Tanyobj(10,100);语句。
3、指出下面程序段中的错误,并说明出错原因。
classone
{private:
inta;
public:
voidfunc(two&);
};
classtwo
{private:
intb;
friendvoidone:
:
func(two&);
};
voidone:
:
func(two&r)
{
a=r.b;
}
答:
voidfunc(two&);出错,two尚未声明
(应在classone前加声明语句classtwo;)。
4、指出下面程序段中的错误,并说明出错原因。
#include
classA
{public:
voidfun(){cout<<″a.fun″<};
classB
{public:
voidfun(){cout<<″b.fun″<voidgun(){cout<<″b.gun″<};
classC:
publicA,publicB
{private:
intb;
public:
voidgun(){cout<<″c.gun″<voidhun(){fun();}
};
答:
voidhun(){fun();}出错,C:
:
fun()有二义性。
5、指出下面程序段中的错误,并说明出错原因。
classLocation
{intX,Y=20;
protected:
intzeroX,zeroY;
intSetZero(intZeroX,intZeroY);
private:
intlength,height;
public:
floatradius;
voidinit(intinitX,intinitY);
intGetX();
intGetY();
};
答:
intX,Y=20;出错,不能采用这种方式初始化。
6、下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。
#include
#include
classA
{public:
A(constchar*nm){strcpy(name,nm);}
private:
charname[80];
};
classB:
publicA
{public:
B(constchar*nm):
A(nm){}
voidPrintName()const;
};
voidB:
:
PrintName()const
{cout<<"name:
"<voidmain()
{Bb1("wangli");
b1.PrintName();}
7、用下横线标出下面程序main函数中的错误所在行,并说明错误原因。
#include
classLocation
{private:
intX,Y;
public:
voidinit(intinitX,intinitY);
intsumXY();
};
voidLocation:
:
init(intinitX,intinitY)
{X=initX;Y=initY;}
intLocation:
:
sumXY()
{returnX+Y;}
voidmain()
{
LocationA1;
intx,y;
A1.init(5,3);
x=A1.X;y=A1.Y;
cout<}
8、下面的程序有一处错误,请用下横线标出错误所在行并改正错误。
#include
classTest
{
public:
staticintx;
};
intx=20;//对类的静态成员初始化错误
voidmain()
{
cout<:
x;
}
9、指出下面的程序中的两处错误,并改正
classExam{
public:
Exam(inty=10){data=y;}
intgetdata()const
{return++data;}
//错误①常成员函数不能修改对象
//修改方法:
删除关键字const
staticintgetcount()
{cout<//错误②静态成员函数不能直接访问非静态成员
//修改方法:
删除cout这一行
return++count;}
private:
intdata;
staticintcount;
};
10、指出下面的程序中的错误,并改正
char*string;
string=newchar[]
free(string);
//用new动态分配的内存不能用free函数来释放
//修改方法:
用delete运算符来释放
11、指出下面的程序中的错误
#include
#include
classPerson
{public:
Person(char*pN)
{cout<<"Constructing"<pName=newchar[strlen(pN)+1];
if(pName!
=0)strcpy(pName,pN);
~Person()
{cout<<"Destructing"<pName[0]='\0';
deletepName;}
protected:
char*pName;
};
voidmain()
{Personp1("Randy");
Personp2=p1;//即Personp2(p1);
}
//对同一个空间的两次释放,修改方法:
增加一个复制构造函数
Person:
:
Person(Person&p)
{pName=newchar[strlen(p.pName)+1];
strcpy(pName,p.pName);
}
五、写出下面程序的执行结果
1、#include
classA{
int*a;
public:
A(intx){a=newint(x);cout<<"*a="<<*a<};
voidmain(){
Ax(3),*p;
p=newA(5);
deletep;
}
输出为:
*a=3
*a=5
2、#include
template
voidf(T&x,Q&y)
{if(sizeof(T)>sizeof(Q))x=(T)y;
elsey=(Q)x;}
voidmain()
{
doubled;
inti;
d=9999;i=88;
f(d,i);
cout<<"d="<d=88;i=9999;
f(i,d);
cout<<"d="<}
输出为:
d=88i=88
d=9999,i=9999
3、#include
classbase
{
public:
virtualintfunc(){return0;}
};
classderived:
publicbase
{
public:
intfunc(){return100;}
};
voidmain()
{
derivedd;
base&b=d;
cout<cout<:
func()<}
输出为:
100
0
4、#include
classTest
{
private:
staticintval;
inta;
public:
staticintfunc();
staticvoidsfunc(Test&r);
};
intTest:
:
val=20;
intTest:
:
func()
{val+=val;returnval;}
voidTest:
:
sfunc(Test&r)
{
r.a=25;
cout<<"Result3="<}
voidmain()
{cout<<"Result1="<:
func()<Testa;
cout<<"Result2="<Test:
:
sfunc(a);
}输出为:
Result1=40
Result2=80
Result3=25
5、#include
template
classTclass
{private:
Tx,y;
public:
Tclass(Ta,Tb):
x(a){y=b;}
Tclass(Ta){y=(T)0,x=a;}
voidpr()
{charc;
c=(y>=(T)0?
'+':
'-');
cout<(T)0?
y:
-y)<<"i"<};
voidmain()
{
Tclassa(10.5,-5.8);
a.pr();
Tclassb(10);
b.pr();
}
输出为:
10.5-4.8i
10+0i
6、#include
classtest
{public:
test()
{cout<<"调用构造函数"<};
voidf(inti)
{statictestx;
cout<
voidmain()
{f(10);
f(20);
}
输出为:
调用构造函数
10
20
7、#include
voidmain()
{
int*a;
int*&p=a;
intb=10;
p=&b;
cout<<*a;
}
输出为:
10
8、#include
template
Tf(T*a,T*b,intn){
Ts=(T)0;
for(inti=0;is+=a[i]*b[i];
returns;
}
voidmain()
{
doublec[5]={1.1,2.2,3.3,4.4,5.5},d[5]={10.0,100.0,1000.0};
cout<}
输出为:
3531
9、#include
voidmain()
{
for(inti=0;i<4;i++)
cout<0?
'0':
'');
}
输出为:
0
0#0
0###0
0#####0
10、运行下面的程序,写出当输入25,60时的输出结果。
#include
classgoods
{
private:
staticinttotalWeight;
intweight;
public:
goods(intw)
{weight=w;
totalWeight+=w;}
goods(goods&gd)
{weight=gd.weight;
totalWeight+=weight;}
~goods()
{totalWeight-=weight;}
intgetwg()
{returnweight;}
staticintgetTotal()
{returntotalWeight;}
};
intgoods:
:
totalWeight=0;
voidmain()
{intw;
cout<<"Theinitialweightofgoods:
"<:
getTotal()<cin>>w;//输入25
goodsg1(w);
cin>>w;//输入60
goodsg2(w);
cout<<"Thetotalweightofgoods:
"<:
getTotal()<}
输出为:
Theinitialweightofgoods:
0
Thetotalweightofgoods:
85
11、#include
classA
{public:
virtualvoidprint(){cout<<"ThisisclassAprinting."<};
classB:
publicA
{public:
voidprint(){}
};
classC:
publicB
{public:
voidprint(){cout<<"ThisisclassCprinting."<};
voidshow(A&a)
{a.print();}
voidmain()
{Aa;Bb;Cc;
show(a);show(b);show(c);
}
输出为:
ThisisclassAprinting.
ThisisclassCprinting.
12、#include
classA
{public:
A(){a=0;}
A(inti){a=i;}
voidPrint(){cout<intGeta(){returna;}
private:
inta;
};
classB:
publicA
{public:
B(){b=0;}
B(inti,intj,intk);
voidPrint();
private:
intb;
Aaa;
};
B:
:
B(inti,intj,intk):
A(i),aa(j){b=k;}
voidB:
:
Print()
{A:
:
Print();
cout<
voidmain()
{Bbb[2];
bb[0]=B(1,2,5);
bb[1]=B(3,4,7);
for(inti=0;i<2;i++)
bb[i].Print();
}
输出为:
1,5,2
3,7,4
13、#include
classTest
{private:
staticintval;
inta;
public:
staticintfunc();
voidsfunc(Test&r);
};
intTest:
:
val=200;
intTest:
:
func()
{returnval++;}
voidTest:
:
sfunc(Test&r)
{r.a=125;
cout<<"Result3="<voidmain()
{cout<<"Result1="<:
func()<Testa;
cout<<"Result2="<a.sfunc(a);
}输出为:
Result1=200
Result2=201
Result3=125
14、#include
classLocation
{intX,Y;
public:
voidinit(int=0,int=0);
voidvalueX(intval){X=val;}
intvalueX(){returnX;}
voidvalueY(intval){Y=val;}
intvalueY(){returnY;}
};
voidLocation:
:
init(intinitX,intinitY)
{X=initX;Y=initY;}
voidmain()
{LocationA,B;
A.init();
cout<A.valueX(5);
cout<B.init(6,2);
B.valueY(4);
cout<}
输出为:
00
50
64
15、#include
classA{
public:
A(){}
virtualvoidfunc(){cout<<"DestructorA"<~A(){func();}
};
classB:
publicA{
public:
B(){}
voidfunc(){cout<<"DestructorB"<~B(){func();}
};
voidmain()
{
Bb;
A&a=b;
}
输出为:
DestructorB
DestructorA
16、#include
classMyClass{
public:
intnumber;
voidset(inti);
};
intnumber=3;
voidMyClass:
:
set(inti)
{
number=i;
}
voidmain()
{
MyClassmy1;
intnumber=10;
my1.set(5);
cout<my1.set(number);
cout<my1.set(:
:
number);
cout<}
输出为:
5
10
3
17、#include
classAAA{
intA,B;
public:
AAA(inti,intj)
{A=i,B=j;
cout<<"C\n";}
~AAA(){cout<<"D\n";}
voidprint()
{cout<};
voidmain()
{
AAA*a1,*a2;
a1=newAAA(1,2);
a2=newAAA(5,6);
a1->print();
a2->print();
deletea1;
deletea2;
}
输出为:
C
C
1,2
5,6
D
D
18、#include
classb1
{
public:
b1(intx){cout<A\n";}
~b1(){cout<<"B\n";}
};
classb2
{
public:
b2(intx){cout<C\n";}
~b2(){cout<<"D\n";}
};
classAAA:
publicb2,publicb1
{
public: