C期末复习程序分析.docx

上传人:b****4 文档编号:11870370 上传时间:2023-04-06 格式:DOCX 页数:27 大小:20.83KB
下载 相关 举报
C期末复习程序分析.docx_第1页
第1页 / 共27页
C期末复习程序分析.docx_第2页
第2页 / 共27页
C期末复习程序分析.docx_第3页
第3页 / 共27页
C期末复习程序分析.docx_第4页
第4页 / 共27页
C期末复习程序分析.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C期末复习程序分析.docx

《C期末复习程序分析.docx》由会员分享,可在线阅读,更多相关《C期末复习程序分析.docx(27页珍藏版)》请在冰豆网上搜索。

C期末复习程序分析.docx

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;i

s+=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:

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

当前位置:首页 > 高中教育 > 其它课程

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

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