c(机械工业出版社)课后习题_第1页
c(机械工业出版社)课后习题_第2页
c(机械工业出版社)课后习题_第3页
c(机械工业出版社)课后习题_第4页
c(机械工业出版社)课后习题_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

习题1

1、编写一个程序,读取圆的半径,打印圆的直径、周长和面积。式用常量值3.14159。在输

出中进行这些计算。

#include<iostream>

usingnamespacestd;

intmain()

(

doubler,P=3.14159;

cout«"Pleaseenterther:H«endl;

cin»r;

cout«"d\tc\ts"«endl;

cout«2*r«"\t"«2*P*r«"\t"«P*r*r«endl;

return0;

)

2、编写一个程序,读取5个整数并确定和打印其中的最大值。

#include<iostream>

usingnamespacestd;

intmain()

(

inta[5],maxj;

cout«"pleaseenterfivenumbers:"«endl;

for(i=0;i<5;i++)

cin»a[i];

max=a[0];

for(i=l;i<5;i++)

{

if(a[i]>max)

max=a[i];

)

cout«"maxis"«max«endl;

return0;

3、编写•个程序,读取一个整数并确定和打印其为奇数或偶数。

#include<iostream>

usingnamespacestd;

intmain()

intn;

cout«"Pleaseenteranumber:n«endl;

cin»n;

if(n%2==0)

cout«"even!"«endl;//odd为奇数,even为偶数

else

cout«"odd!',«endl;

return0;

)

4、用八条输出语句显示下列棋盘图案,然后用更少的语句显示这个棋盘图案。

********

********

********

********

********

********

********

********

#include<iostream>

usingnamespacestd;

intmain()

(

cout«H********"«endl;

cout«"********"«endl;

cout«"********"«endl;

cout«"********n«endl;

cout«"********"«endl;

cout«"********"«endl;

cout«"********"<<endl;

cout«"********"«endl;

return0;

)

习题2

2.1输入n,求2+2!+3!+…+n!

#include<iostream>

usingnamespacestd;

intmain()

(

intfun(intx);

intnJ,s=0;

cout«"pleaseenteranumber:"«endl;

cin»n;

for(i=l;i<=n;i++)

s=s+fun(i);

cout«"l!+2!+3!+...+n!=H«s«endl;

return0;

)

intfun(intx)

(

inty;

if(x==l||x==0)

y=i;

else

y=x*fun(x-l);

returny;

2.2猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前

一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。

#include<iostream>

usingnamespacestd;

intmain()

(

intr=l,n,d=9;

for(d=9;d>0;d-)

(

n=2*(r+l);

r=n;

)

cout«ntotal="«n«endl;

return0;

}

2.3从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正

数和负数的个数。

#include<iostream>

usingnamespacestd;

intmain()

inta[100]JJ/sum=0/nl=0/n2=0;

doubleave;

cout«"Pleaseinputthearray(endwith0):"«endl;

for(i=0;i<100;i++)

(

cin»a[i];

if(a[i]==O)

break;

)

for(j=0;j<i;j++)

(

sum=sum+a[j];

if(aO]>0)

nl=nl+l;

else

n2=n2+l;

)

ave=(double)sum/i;

cout«"average="«ave«endl;

cout«nl«'\t'«n2«endl;

return0;

)

2.4编程找出l~500之中满足除以3余2,除以5余3,除以7余2的整数。

#include<iostream>

usingnamespacestd;

intmain()

(

inti;

for(i=l;i<=500;i++)

(

if(i%3==2)

if(i%5==2)

if(i%7==2)

cout«i«'\t';

)

cout«endl;

return0;

)

2.5编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。

例如6=1+2+3,就是一个完全数。

#include<iostream>

usingnamespacestd;

intmain()

inti,j,s;

for(i=2;i<=1000;i++)

s=0;

for(j=l;j<i;j++)〃判断因子

(

if(i%j==O)

s=s+j;

)

if(i==s)〃完全数的条件

(

cout«i<<"是完全数"<<endl;

cout<<"其因子分别为";

for(j=l;j<i;j++)

(

if(i%j==O)

cout«j«'\t';

)

cout«endl;

)

)

return0;

}

2.6将100元换成用10元、5元和1元的组合,共有多少种组合方法。

#include<iostream>

usingnamespacestd;

intmain()

(

intij,k,n=0;

for(i=0;i<=10;i++)〃计算组合方法总数

(

for(j=0;j<=20;j++)

(

for(k=0;k<=100;k++)

(

if((i*10+j*5+k)==100)

n=n+l;

)

)

)

cout<<"共有"<<n<<"种组合方法"<<endl;〃输出总数。

cout<<"分别为"<<endl;〃从此处开始列出组合情况

cout<<"十块\t"«"五块\t"<<"一块"<<endl;

for(i=0;i<=10;i++)〃分别将各种组合输出

for(j=0;j<=20;j++)

(

for(k=0;k<=100;k++)

(

if((i*10+j*5+k)==100)

(

cout«i«'\t'

«k«endl;

)

)

}

)

return0;

习题3

3.1设计函数,将小写英文字符变为对应的大写字符。

#include<iostream>

usingnamespacestd;

intmain()

(

charij;

charfun(chara);〃函数声明

cout<<“请输入一个小写字母“<<endl;

cin»i;

j=fun(i);

cout«j«endl;

return0;

)

charfun(chara)〃转换函数

(

charb;

b=a-32;

returnb;

3.2设计两个函数,分别求两个整数的最大公约数和最小公倍数。

#include<iostream>

usingnamespacestd;

intmain()

inta,b,gj;

intgcd(intajntb);//gcd为英语最大公约数的首字母缩写,下面的1cm即为最小公倍数的

缩写

intlcm(intajntb);

cout<<”请输入两个不等的整数:"<<endl;

cin»a»b;

g=gcd(a,b);

l=lcm(a,b);

coutvv”最大公约数为"<<g«endl;

cout<<"最小公倍数为"<<k<endl;

return0;

)

intgcd(inta,intb)〃用更相减损法求最大公约数

(

intc;

while(a!=b)

(

if(a>b)

(

c=a-b;

a=c;

}

else

(

c=b-a;

b=c;

)

)

returna;

}

intlcm(inta,intb)〃最小公倍数等于两数的积除以两数的最大公约数

(

intg,l;

g=gcd(a,b);

l=a*b/g;

returnI;

)

3.3设计函数digit(num,k),返回整数num从右边开始的第k位数字的值。例如:

digit(4647,3)=6

digit(23523,7)=0

#include<iostream>

usingnamespacestd;

intmain()

(

intdigit(intnum,intk);

intnum,k;

cout<<”请输入一个正整数及所求位数Lvvendl;

cin»num»k;

出结果

cout«digit(num/k)«endl;//$fe

return0;

}

intdigit(intnumjntk)

(

inta=l,b=l,i,j;

for(i=l;i<=k-l;i++)

a=a*10;

for(i=l;i<=k;i++)

b=b*10;

j=(num/a)-10*(num/b);

returnj;

3.4设计函数factors(num,k),返回整数num中包含因子k的个数,如果没有该因子,则

返回0。

#include<iostream>

usingnamespacestd;

intmain()

(

intfactors(intnumjntk);

intnum,k;

coutcv"请输入一-个整数及所求因子"<<endl;

cin»num»k;

cout«factors(num,k)«endl;

return0;

)

intfactors(intnumjntk)

(

intn=0;

while(num%k==0)

(

n=n+l;

k=k*k;

)

returnn;

}

3.5歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和。例如:

4=2+26=3+38=3+5......50=3+47

将4~50之间的所有偶数用两个素数之和表示。判断一个整数是否为素数用函数完成。

/*歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和。例如:

4=2+26=3+38=3+5......50=3+47

将4~50之间的所有偶数用两个素数之和表示。判断•个整数是否为素数用函数完成。

*/

#include<iostream>

usingnamespacestd;

intmain()

(

intfun(intx);〃声明判断素数的函数

inti,j,k;

for(i=4;i<=50;i=i+2)

(

for(j=l;j<=50;j++)

{

if(fun(j)==l)〃代表j为素数

(

for(k=j;k<=50;k++)

|

if(fun(k)==l)

(

if(i==j+k)

cout«i«"="«j«"+"«k«endl;

)

}

)

)

return0;

intfun(intx)〃判断素数的函数

(

inti,y;

if(x<=l)

y=o;

else

(

y=i;

for(i=2;i<x;i++)

(

if(x%i==0)

(

y=o;

break;

)

)

)

returny;

}

习题4

4.1引用作为函数参数时为什么能实现两个实参之间的数据交换?为什么对应实参不能为

引用?为什么返回值为引用的函数可以作为左值?

答:

因为当函数参数为实参的引用时,实际上是将卖参的地址待的给了形

参,它们共用同一个地址,所以当形参改变时,实参之间的数据也欢

变了;

因为引用不是一种独立的数据类型,所以对应实参不能为引用;

因为引用与变量共用相同的内存空间,当返回值为引用时,实际上就

是返回的变量的值。

4.2构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成

员包括设置日期时间和输出时间,其中年、月请用枚举类型,并完成测试。(包括用成员函

数和用普通函数)

include<iostream>

include<iomanip>

usingnamespacestd;

enumyear{Y2000,Y2001,Y2002,Y2003,Y2004,Y2005,Y2006,Y2007,Y2008,Y2009,Y2010,Y2011};〃

enummonth{Jan,Feb,Mai;Api;May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};

classTimedate

(

private:

yearY;

monthM;

intD,H,Min,S;

public:

Timedate()

(

Y=Y2O11;

M=Jan;

D=l;

H=0;

Min=0;

S=0;

};

voidset(yeara,monthb,intc,intd,inte,intf)

(

Y=a;

M=b;

D=c;

H=d;

Min=e;

s=f;

);

voidshow()

(

cout<<"日期:\n”;

switch(Y)

caseY2000:cout«"2000年”;break;

caseY2001:cout«"2001年”;break;

caseY2002:cout«"2002年”;break;

caseY2003:cout«"2003年”;break;

caseY2004:cout«"2004年”;break;

caseY2005:cout«"2005年”;break;

caseY2006:cout«"2006年”;break;

caseY2007:cout«"2007年";break;

caseY2008:cout«H2008年”;break;

caseY2009:cout«"2009年”;break;

caseY2010:cout«"2010年”;break;

caseY2011:cout«"2011年”;break;

)

switch(M)

(

caseJan:cout«"l月”;break;

caseFeb:cout«"2月”;break;

caseMar:cout«H3月”;break;

caseApr:cout«"4月”;break;

caseMay:cout«"5月";break;

caseJun:cout«"6月”;break;

caseJul:cout«"7月”;break;

caseAug:cout«"8月";break;

caseSep:cout«"9月";break;

caseOct:cout«"10月";break;

caseNov:cout«"ll月";break;

caseDec:cout«"12月”;break;

)

cout<<D<<"曰\n”;

cout<<”时间:\n“

<<H<<“时”

<<Min<<“分"

秒”;

cout«endl;

);

voidget(year&a,month&b,int&cjnt&d,int&e,int&f)

(

a=Y;

b=M;

c=D;

d=H;

e=Min;

f=s;

);

);

voidshow(Timedatea)

yearY;

monthM;

intD,H,Min,S;

a.get(YM,D,H,Min,S);

cout<<<旧期:\n”;

switch(Y)

(

caseY2000:cout«n2000年”;break;

caseY2001:cout«"2001年”;break;

caseY2002:cout«"2002年”;break;

caseY2003:cout«"2003年”;break;

caseY2004:cout«"2004年”;break;

caseY2005:cout«"2005年”;break;

caseY2006:cout«"2006年”;break;

caseY2007:cout«n2007年”;break;

caseY2008:cout«"2008年”;break;

caseY2009:cout«"2009年”;break;

caseY2010:cout«"2010年”;break;

caseY2011:cout«"2011年”;break;

)

switch(M)

(

caseJan:cout«"l月";break;

caseFeb:cout«*'2月”;break;

caseMar:cout«"3月";break;

caseApr:cout«"4月”;break;

caseMay:cout«"5月";break;

caseJun:cout«"6月”;break;

caseJul:cout«"7月”;break;

caseAug:cout«"8月”;break;

caseSep:cout«"9月”;break;

case0ct:cout«"10月”;break;

caseNov:cout«"ll月”;break;

caseDec:cout«"12月";break;

)

cout«D«"H\n";

cout<<“时间:\n“

时,,

“分"

v<S<<“秒”;

cout«endl;

intmain()

(

Timedater;

r.setfYZOl^Apcl,14,30,50);

r.show();

show(r);

r.set(Y2010,Jun,8,1,50,00);

r.show();

show(r);

return0;

)

4.3设计并测试一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,矩形水平

放置。操作为计算矩形周长与面积。测试包括用成员函数和普通函数。

#include<iostream>

usingnamespacestd;

classRectangle

(

private:

intxl,x2,yl,y2;

public:

Rectangle()

(

cout<<"请输入左下角和右上角的坐标:"<<endl;

cin»xl»yl»x2»y2;

);

intgetleftx()

(

returnxl;

);

intgetlefty()

(

returnyl;

);

jntgetrightx()

(

returnx2;

};

intgetrighty()

(

returny2;

);

intcircumference。〃成员函数

return2*(x2-xl+y2-yl);

);

doublearea()

(

doubles;

s=(double)(x2-xl)*(y2-yl);

returns;

);

};

intcir(intxl,intyljntx2,inty2)〃普通函数

(

intc;

c=2*(x2-xl+y2-yl);

returnc;

}

doublear(intxl,intyljntx2Jnty2)

(

doubles;

s=(double)(x2-xl)*(y2-yl);

returns;

}

intmain()

(

Rectangler;

intc;

doubles;

c=r.circumference();〃调用成员函数

s=r.area();

cout<<“周长为“<<c<<endl;

cout<<"面积为”<<s«endl;

intxl,x2,yl,y2;

xl=r.getleftx();

x2=r.getrightx();

yl=r.getlefty();

y2=r.getrighty();

c=cir(xl/yl,x2/y2);

s=ar(xl/yl,x2,y2);

cout<<“周长为"<<c«endl;

cout<<”面积为“<<s«endl;

return0;

作业5

6.定义一个圆类(Circle),属性为半径(radius)、圆周长和面积,操作为输入半径并计算周

长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长

和面积在构造函数中生成)和拷贝构造函数。

#include<iostream>

#defineP3.1415926

usingnamespacestd;

classCircle

(

private:

doubleGC,S;

public:

Circle(doubler=0)〃缺省构造函数

(

c=2*P*r;

s=p*r*4;

);

voidshow(void)

(

cout<<“周长为“<«<<endl

<<“面积为"<<s<<endl;

);

Circle(Circle&p)〃拷贝构造函数

(

r=p.r;

c=p.c;

s=p.s;

);

);

intmain()

(

doubler;

cout<<"请输入半径:"<<endl;

cin»r;

CircleR(r);

R.show();

CircleC(R);

C.show();

return0;

7.定义一个字符栈类Stack(包括类的实现)。数据成员包括•个存放字符的数组stck口和一

个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push。和Pop。。

#include<iostream>

usingnamespacestd;

constintSIZE=25;

classStack

(

private:

charstck[SIZE];

inttos;

public:

Stack():tos(0){};

voidPush(charch)

(

if(tos==SIZE)

cout«"\nStackisfull\n";

else

(

stck[tos]=ch;

tos++;

)

};

charPop()

(

if(tos==0)

(

cout«"\nStackisempty\n";

return0;

)

tos-;

returnstck[tos];

};

);

intmain()

(

StackS;

charc[100];

inti,n;

cout«"Pleaseinputthestring:\n";

cin»c;

for(i=0;i<100;i++)

if(c[i]=='\O')

(

n=i;

break;

)

)

S.Pop();

for(i=0;i<n;i++)

S.Push(c[i]);

return0;

习题6

L建立具有下列功能的类Date:

a)以多种格式输出日期,如:

DDDYYYY

MM/DD/YY

June14,1992

b)用重载的构造函数初始化Date类的对象。初始化值是a)中格式的数据。

c)构造函数用头文件time.h中的标准库函数读取系统的时间,把读取的时间赋给Date的数

据成员。

#include<iostream>

#include<time.h>

usingnamespacestd;

classDate

(

private:

public:

)

intmain()

(

return0;

习题7

1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数

重载为非成员、非友元的普通函数。编写程序,求两个复数之和。

#include<iostream>

usingnamespacestd;

classComplex

(

private:

doubler,i;

public:

Complex(doublea=0,doubleb=0)

(

r=a;

i=b;

);

voidset(doublea,doubleb)

(

r=a;

i=b;

);

voidshow()

(

if(i==0)

cout«r;

else

(

if(r==O)

cout«i«"i"«endl;

else

cout«r«"+"«i«,,i";

)

};

doublegetr()

(

returnr;

);

doublegeti()

(

returni;

);

};

Complexoperator+(Complex&cl,Complex&c2)

doublerj,rl,r2,il,i2;

rl=cl.getr();

il=cl.geti();

r2=c2.getr();

i2=c2.geti();

r=rl+r2;

i=il+i2;

Complexc(r,i);

returnc;

};

intmain()

(

doubleal,a2,bl,b2;

cout<<"请输入第一个复数:"<<endl;

cin»al»bl;

Complexcl(alzbl)zc2zc;

coukv”请输入第二个复数:"<<endl;

cin»a2»b2;

c2.set(a2,b2);

c=cl+c2;

cout«"('';cl.show();cout«',)+('*;c2.show();cout«")=";c.show();cout«endl;

return0;

)

2.定义一个复数类Complex,重载运算符“+「7”,使之能用于复数的加、减、

乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、

积和商。

#include<iostream>

usingnamespacestd;

classComplex

(

private:

doubleGi;

public:

Complex(doublea=0,doubleb=0)

(

r=a;

i=b;

);

voidset(doublea,doubleb)

r=a;

i=b;

);

voidshow()

(

if(i==0)

cout«r;

else

(

if(r==O)

cout«i«"i"«endl;

else

cout«r«"+"«i«"i";

)

);

Complexoperator+(Complex&cl);

Complexoperator-(Complex&cl);

Complexoperator*(Complex&cl);

Complexoperator/(Complex&cl);

);

ComplexComplex::operator+(Complex&cl)

(

Complexc;

c.r=r+cl.r;

c.i=i+cl.i;

returnc;

);

ComplexComplex::operator-(Complex&cl)

(

Complexc;

c.r=r-cl.r;

c.i=i-cl.i;

returnc;

);

ComplexComplex::operator*(Complex&cl)

(

Complexc;

c.r=r*cl.r-i*cl.i;

c.i=r*cl.i+i*cl.r;

returnc;

);

ComplexComplex::operator/(Complex&cl)

Complexc;

c.r=(r*cl.r+i*cl.i)/(cl.i*cl.i+cl.r*cl.i);

c.r=(i*cl.r-r*cl.i)/(cl.i*cl.i+cl.r*cl.i);

returnc;

);

intmain()

(

doubleal,a2,bl,b2;

cout<<"请输入第一个复数:"«endl;

cin»al»bl;

Complexcl(al,bl),c2,c3,c4,c5,c6;

cout<<”请输入第二个复数:"号endl;

cin»a2»b2;

c2.set(a2,b2);

c3=cl+c2;

c4=cl-c2;

c5=cl*c2;

c6=cl/c2;

cout«"(H;cl.show();cout«,,)+(";c2.show();cout«")=";c3.show();cout«endl;

cout«"('';cl.show();cout«")-(',;c2.show();cout«")=";c4.show();cout«endl;

cout«"('';cl.show();cout«")*(,,;c2.show();cout«")=";c5.show();cout«endl;

cout«"(";cl.show();cout«,,)/(";c2.show();cout«")=";c6.show();cout«endl;

return0;

)

3,定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。参加运算的两

个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。例如:

cl+c2J+cl,cl+i

均合法(设i为整数,cl,c2为复数)。编程序,分别求两个复数之和、整数和复数之和。

#include<iostream>

usingstd::cout;

usingstd::cin;

usingstd::endl;

classComplex

(

private:

doubler,i;

public:

Complex(doublea=0,doubleb=0)

r=a;

i=b;

);

voidset(doublea,doubleb)

(

r=a;

i=b;

);

voidshow()

{

if(i==0)

cout«r;

else

(

if(r==O)

cout«i«Hi"«endl;

else

)

);

Complexoperator+(Complex&cl);

Complexoperator+(inta);

friendComplexoperator+(intazComplex&cl);

);

ComplexComplex::operator+(Complex&cl)

(

Complexc;

c.r=r+cl.r;

c.i=i+cl.i;

returnc;

};

ComplexComplex::operator+(inta)

(

Complexc;

c.i=i;

c.r=r+a;

returnc;

);

Complexoperator+(inta,Complex&cl)

(

Complexc;

c.i=cl.i;

c.r=cl.r+a;

returnc;

);

intmain()

(

doubleal,a2,bl,b2;

coutv<”请输入第一个复数:"<<endl;

cin»al»bl;

Complexcl(aLbl),c2,c3,c4,c5;

cout<<”请输入第二个复数:"<<endl;

cin»a2»b2;

c2.set(a2,b2);

c3=cl+c2;

cout«"(',;cl.show();cout«")+(";c2.show();cout«")=";c3.show();cout«endl;

cout<<”请输入一个整数:"<<endl;

inta;

cin»a;

c4=cl+a;

cout«"(',;cl.show();cout«")+,,«a«"=";c4.show();cout«endl;

c5=a+c2;

cout«a«,,+(";c2.show();cout«")=";c5.show();cout«endl;

return0;

);

4.有两个矩阵a和b,均为2行3歹lj。求两个矩阵之和。重载运算符“+”,使之能用于矩阵

相加。如:c=a+bo

#include<iostream>

usingstd::cout;

usingstd::cin;

usingstd::endl;

classJuzhen

(

private:

intm[2][3];

public:

Juzhen()

(

inti,j;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

m[i][j]=0;

};

voidset()

(

cout<<"请输入矩阵:"<<endl;

inti,j;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

cin»m[i][j];

};

voiddisplay()

(

inti,j;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

cout«m[i][j]«"\t";

cout«endl;

)

};

friendJuzhenoperator+(Juzhen&jl,Juzhen&j2);

};

Juzhenoperator+(Juzhen&a,Juzhen&b)

(

inti,j;

Juzhenc;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

c.m[i][j]=a.m[i][j]+b.m[i][j];

returnc;

};

intmain()

(

Juzhena,b,c;

a.set();

b.set();

c=a+b;

c.display));

return0;

};

5.在第4题的基础匕重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵

的输入和输出。

#include<iostream.h>

classJuzhen

(

private:

intm[2][3];

public:

Juzhen()

(

inti,j;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

m[i][j]=O;

}

};

friendJuzhenoperator+(Juzhen&jl,Juzhen&⑵;

friendostream&operator«(ostream&Juzhen&);

friendistream&operator»(istream&Juzhen&);

};

Juzhenoperator+(Juzhen&a,Juzhen&b)

(

inti,j;

Juzhenc;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

c.m[i][j]=a.m[i][j]+b.m[i][j];

}

returnc;

};

ostream&operator«(ostream&out,Juzhen&a)

(

inti,j;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

cout«a.m[i][j]«"\t";

cout«endl;

)

returnout;

);

istream&operator»(istream&in,Juzhen&a)

(

cout<<"请输入矩阵:"<<endl;

intij;

for(i=0;i<2;i++)

(

for(j=0;j<3;j++)

cin»a.m[i][j];

)

returnin;

};

intmain()

(

Juzhena,b,c;

cin»a»b;

cout«"Juzhena"«endl«a

«"Juzhenb"«endl«b;

c=a+b;

cout«"Juzhenc=Juzhena+Juzhenb="«endl«c;

return0;

)

6.请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变

量dl中,输HIa的值,再以复数形式输出此值。定义Complex(复数)类,在成员函数中包

含重载类型转换运算符:operatordouble(){returnreal;}

#include<iostream>

usingnamespacestd;

classComplex

(

private:

doublereal,image;

public:

Complex(doublea=0,doubleb=0)

(

real=a;

image=b;

};

operatordouble()

returnreal;

);

voiddisplay()

(

if(image==0)

cout«real;

else

(

if(real==O)

cout«image«"i"«endl;

else

cout«real«"+"«image«"i";

)

cout«endl;

);

);

intmain()

(

doublea,b,c,d;

cout<<”请输入一个复数:"<<endl;

cin»a»b;

Complexcl(a,b),c2;

cout<v"请输入一个double数:"<<endl;

cin»c;

d=c+cl;

cout«"d="«d«endl;

c2=Complex(d);

cout«"c2=";

c2.display();

return0;

)

7.定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如

num(号码),name(姓名),sex(性别)。编写程序,将•个Student对象(学生)转换为Teacher(教

师)类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校

担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师

的数据的一部分。

#include<iostream>

usingnamespacestd;

classStudent

(

private:

intnum;

charname[20];

charsex;

doublescore;

public:

Student(int,char[]/char;float);

intget_num()

(

returnnum;

);

char*get_name()

(

returnname;

);

charget_sex()

(

returnsex;

};

voiddisplay()

(

cout<<“num:“<<num<<”\nname:“<<name<<"\nsex:“<<sex<<”\nscore:"<<score<<"\n\n”;

};

);

Student::Student(intn,charnam[],charsjloatso)

(

num=n;

strcpy(name,nam);

sex=s;

score=so;

)

classTeacher

(

private:

intnum;

charname[20];

charsex;

doublepay;

public:

Teacher(){};

Teacher(Student&);

Teacher(intnzcharnam[],charsexjloatpay);

voiddisplay();

);

Teacher::Ieacher(intn,charnam[],charsjloatp)

(

num=n;

strcpy(name,nam);

sex=s;

pay=p;

};

Teacher::Teacher(Student&stud)

(

num=stud.get_num();

strcpy(name,stud.get_name());

sex=stud.get_sex();

pay=1500;

};

voidTeacher::display()

(

cout<<“num:“<<num<<”\nname:"<<name<<"\nsex:"<<sex<<"\npay:“<<pay<<”\n\n”;

);

intmain()

(

,

Teacherteacherl(10001/"Li"/f'z1234.5)/teacher2;

StudentstudentlfZOOlO/'Wang'Vm'^g.S);

cout«"studentl:"«endl;

studentl.display();

teacher2=Teacher(studentl);

cout«"teacher2:"«endl;

teacher2.display();

return0;

)

习题8

1.定义一个字符栈类Stack(包括类的实现)。数据成员包括一个存放字符的数组stck口和•

个栈指针tos。栈数组的尺寸由常量SIZE确定。栈的基本操作为Push()和Pop()。

#include<iostream>

usingnamespacestd;

constintSIZE=25;

classStack

private:

charstck[SIZE];

inttos;

public:

Stack():tos(0){};

voidPush(charch)

(

if(tos==SIZE)

cout«"\nStackisfull\n";

else

(

stck[tos]=ch;

tos++;

)

};

charPop()

(

if(tos==0)

(

cout«"\nStackisempty\n";

return0;

)

tos-;

returnstck[tos];

};

);

intmain()

(

StackS;

charc[100];

inti,n;

cout«"Pleaseinputthestring:\n";

cin»c;

for(i=0;i<100;i++)

(

if(c[i]=='\0')

(

n=i;

break;

)

)

S.Pop();

for(i=0;i<n;i++)

S.Push(c[i]);

return0;

)

习题十

1.创建一个类,具有public、private和protected数据成员和函数成员。创建该类的个

对象,看看试图存取所有的类成员时会得到一些什么信息。编写一个全局friend函数来访问

该类的私有数据成员。

#include<iostream>

usingnamespacestd;

classcomplex

(

public:

complex()

(

a=0;

b=l;

c=2;

);

inta;

voidA()

{

cout«a«endl;

);

friendvoidset(complex&o,intx=0,inty=O,intz=0);

voidshow()

(

cout<<”a,b,c="<<endl;

A();

B();

C();

);

private:

intb;

voidB()

(

cout«b«endl;

);

protected:

intc;

voidC()

cout«c«endl;

);

);

voidset(complex&ojntx,intyjntz)

(

o.a=x;

o.b=y;

o.c=z;

);

/*

voidfun(complex&o,intx,intyjntz)

(

o.a=x;

o.b=y;

o.c=z;

);7

intmain()

(

complext;

t.show();

//fun(t,2,5,8);

//t.show();

set(t,4,7,6);

t.show();

return0;

}

2.创建一个没有任何构造函数的类,显示可以用缺省的构造函数创建对象。然后为该类创

建一个非缺省的构造函数(带一个参数),试着再编译一次,解释发生的现象。

#include<iostream>

usingnamespacestd;

classcomplex

(

public:

complex(inta);

voidshow()

cout<<"可以用缺省的构造函数创建对象々endl;

);

);

intmain()

complexc;

c.show();

return0;

)

3.建立一-个类,该类包含const成员函数和非const成员函数,然后建立这个类的const

和非const对象。分别为这两种类型的对象调用两种成员函数,解释发生的现象。

#include<iostream>

usingnamespacestd;

classcomplex

(

private:

inta;

public:

complex(intx=0)

(

a=x;

};

intget()const

(

returna;

);

voidset(intx)

(

a=x;

);

);

intmain()

(

comp

温馨提示

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

评论

0/150

提交评论