c(機(jī)械工業(yè)出版社)課后習(xí)題_第1頁(yè)
c(機(jī)械工業(yè)出版社)課后習(xí)題_第2頁(yè)
c(機(jī)械工業(yè)出版社)課后習(xí)題_第3頁(yè)
c(機(jī)械工業(yè)出版社)課后習(xí)題_第4頁(yè)
c(機(jī)械工業(yè)出版社)課后習(xí)題_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

習(xí)題1

1、編寫一個(gè)程序,讀取圓的半徑,打印圓的直徑、周長(zhǎng)和面積。式用常量值3.14159。在輸

出中進(jìn)行這些計(jì)算。

#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、編寫一個(gè)程序,讀取5個(gè)整數(shù)并確定和打印其中的最大值。

#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、編寫?個(gè)程序,讀取一個(gè)整數(shù)并確定和打印其為奇數(shù)或偶數(shù)。

#include<iostream>

usingnamespacestd;

intmain()

intn;

cout?"Pleaseenteranumber:n?endl;

cin?n;

if(n%2==0)

cout?"even!"?endl;//odd為奇數(shù),even為偶數(shù)

else

cout?"odd!',?endl;

return0;

)

4、用八條輸出語(yǔ)句顯示下列棋盤圖案,然后用更少的語(yǔ)句顯示這個(gè)棋盤圖案。

********

********

********

********

********

********

********

********

#include<iostream>

usingnamespacestd;

intmain()

(

cout?H********"?endl;

cout?"********"?endl;

cout?"********"?endl;

cout?"********n?endl;

cout?"********"?endl;

cout?"********"?endl;

cout?"********"<<endl;

cout?"********"?endl;

return0;

)

習(xí)題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猴子吃桃問(wèn)題:猴子摘下若干個(gè)桃子,第一天吃了桃子的一半多一個(gè),以后每天吃了前

一天剩下的一半多一個(gè),到第十天吃以前發(fā)現(xiàn)只剩下一個(gè)桃子,問(wèn)猴子共摘了幾個(gè)桃子。

#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整數(shù),以輸入0標(biāo)志結(jié)束,求這組整數(shù)的平均值,并統(tǒng)計(jì)其中正

數(shù)和負(fù)數(shù)的個(gè)數(shù)。

#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的整數(shù)。

#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之內(nèi)的所有完全數(shù)。所謂完全數(shù)指的是一個(gè)數(shù)恰好等于它的所有因子和。

例如6=1+2+3,就是一個(gè)完全數(shù)。

#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)〃完全數(shù)的條件

(

cout?i<<"是完全數(shù)"<<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++)〃計(jì)算組合方法總數(shù)

(

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;〃輸出總數(shù)。

cout<<"分別為"<<endl;〃從此處開(kāi)始列出組合情況

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;

習(xí)題3

3.1設(shè)計(jì)函數(shù),將小寫英文字符變?yōu)閷?duì)應(yīng)的大寫字符。

#include<iostream>

usingnamespacestd;

intmain()

(

charij;

charfun(chara);〃函數(shù)聲明

cout<<“請(qǐng)輸入一個(gè)小寫字母“<<endl;

cin?i;

j=fun(i);

cout?j?endl;

return0;

)

charfun(chara)〃轉(zhuǎn)換函數(shù)

(

charb;

b=a-32;

returnb;

3.2設(shè)計(jì)兩個(gè)函數(shù),分別求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)。

#include<iostream>

usingnamespacestd;

intmain()

inta,b,gj;

intgcd(intajntb);//gcd為英語(yǔ)最大公約數(shù)的首字母縮寫,下面的1cm即為最小公倍數(shù)的

縮寫

intlcm(intajntb);

cout<<”請(qǐng)輸入兩個(gè)不等的整數(shù):"<<endl;

cin?a?b;

g=gcd(a,b);

l=lcm(a,b);

coutvv”最大公約數(shù)為"<<g?endl;

cout<<"最小公倍數(shù)為"<<k<endl;

return0;

)

intgcd(inta,intb)〃用更相減損法求最大公約數(shù)

(

intc;

while(a!=b)

(

if(a>b)

(

c=a-b;

a=c;

}

else

(

c=b-a;

b=c;

)

)

returna;

}

intlcm(inta,intb)〃最小公倍數(shù)等于兩數(shù)的積除以兩數(shù)的最大公約數(shù)

(

intg,l;

g=gcd(a,b);

l=a*b/g;

returnI;

)

3.3設(shè)計(jì)函數(shù)digit(num,k),返回整數(shù)num從右邊開(kāi)始的第k位數(shù)字的值。例如:

digit(4647,3)=6

digit(23523,7)=0

#include<iostream>

usingnamespacestd;

intmain()

(

intdigit(intnum,intk);

intnum,k;

cout<<”請(qǐng)輸入一個(gè)正整數(shù)及所求位數(shù)Lvvendl;

cin?num?k;

出結(jié)果

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設(shè)計(jì)函數(shù)factors(num,k),返回整數(shù)num中包含因子k的個(gè)數(shù),如果沒(méi)有該因子,則

返回0。

#include<iostream>

usingnamespacestd;

intmain()

(

intfactors(intnumjntk);

intnum,k;

coutcv"請(qǐng)輸入一-個(gè)整數(shù)及所求因子"<<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歌德巴赫猜想指出:任何一個(gè)充分大的偶數(shù)都可以表示為兩個(gè)素?cái)?shù)之和。例如:

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

將4~50之間的所有偶數(shù)用兩個(gè)素?cái)?shù)之和表示。判斷一個(gè)整數(shù)是否為素?cái)?shù)用函數(shù)完成。

/*歌德巴赫猜想指出:任何一個(gè)充分大的偶數(shù)都可以表示為兩個(gè)素?cái)?shù)之和。例如:

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

將4~50之間的所有偶數(shù)用兩個(gè)素?cái)?shù)之和表示。判斷?個(gè)整數(shù)是否為素?cái)?shù)用函數(shù)完成。

*/

#include<iostream>

usingnamespacestd;

intmain()

(

intfun(intx);〃聲明判斷素?cái)?shù)的函數(shù)

inti,j,k;

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

(

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

{

if(fun(j)==l)〃代表j為素?cái)?shù)

(

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

|

if(fun(k)==l)

(

if(i==j+k)

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

)

}

)

)

return0;

intfun(intx)〃判斷素?cái)?shù)的函數(shù)

(

inti,y;

if(x<=l)

y=o;

else

(

y=i;

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

(

if(x%i==0)

(

y=o;

break;

)

)

)

returny;

}

習(xí)題4

4.1引用作為函數(shù)參數(shù)時(shí)為什么能實(shí)現(xiàn)兩個(gè)實(shí)參之間的數(shù)據(jù)交換?為什么對(duì)應(yīng)實(shí)參不能為

引用?為什么返回值為引用的函數(shù)可以作為左值?

答:

因?yàn)楫?dāng)函數(shù)參數(shù)為實(shí)參的引用時(shí),實(shí)際上是將賣參的地址待的給了形

參,它們共用同一個(gè)地址,所以當(dāng)形參改變時(shí),實(shí)參之間的數(shù)據(jù)也歡

變了;

因?yàn)橐貌皇且环N獨(dú)立的數(shù)據(jù)類型,所以對(duì)應(yīng)實(shí)參不能為引用;

因?yàn)橐门c變量共用相同的內(nèi)存空間,當(dāng)返回值為引用時(shí),實(shí)際上就

是返回的變量的值。

4.2構(gòu)造一個(gè)日期時(shí)間類(Timedate),數(shù)據(jù)成員包括年、月、日和時(shí)、分、秒,函數(shù)成

員包括設(shè)置日期時(shí)間和輸出時(shí)間,其中年、月請(qǐng)用枚舉類型,并完成測(cè)試。(包括用成員函

數(shù)和用普通函數(shù))

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<<”時(shí)間:\n“

<<H<<“時(shí)”

<<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<<“時(shí)間:\n“

時(shí),,

“分"

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設(shè)計(jì)并測(cè)試一個(gè)矩形類(Rectangle),屬性為矩形的左下與右上角的坐標(biāo),矩形水平

放置。操作為計(jì)算矩形周長(zhǎng)與面積。測(cè)試包括用成員函數(shù)和普通函數(shù)。

#include<iostream>

usingnamespacestd;

classRectangle

(

private:

intxl,x2,yl,y2;

public:

Rectangle()

(

cout<<"請(qǐng)輸入左下角和右上角的坐標(biāo):"<<endl;

cin?xl?yl?x2?y2;

);

intgetleftx()

(

returnxl;

);

intgetlefty()

(

returnyl;

);

jntgetrightx()

(

returnx2;

};

intgetrighty()

(

returny2;

);

intcircumference?!ǔ蓡T函數(shù)

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

);

doublearea()

(

doubles;

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

returns;

);

};

intcir(intxl,intyljntx2,inty2)〃普通函數(shù)

(

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();〃調(diào)用成員函數(shù)

s=r.area();

cout<<“周長(zhǎng)為“<<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<<“周長(zhǎng)為"<<c?endl;

cout<<”面積為“<<s?endl;

return0;

作業(yè)5

6.定義一個(gè)圓類(Circle),屬性為半徑(radius)、圓周長(zhǎng)和面積,操作為輸入半徑并計(jì)算周

長(zhǎng)、面積,輸出半徑、周長(zhǎng)和面積。要求定義構(gòu)造函數(shù)(以半徑為參數(shù),缺省值為0,周長(zhǎng)

和面積在構(gòu)造函數(shù)中生成)和拷貝構(gòu)造函數(shù)。

#include<iostream>

#defineP3.1415926

usingnamespacestd;

classCircle

(

private:

doubleGC,S;

public:

Circle(doubler=0)〃缺省構(gòu)造函數(shù)

(

c=2*P*r;

s=p*r*4;

);

voidshow(void)

(

cout<<“周長(zhǎng)為“<?<<endl

<<“面積為"<<s<<endl;

);

Circle(Circle&p)〃拷貝構(gòu)造函數(shù)

(

r=p.r;

c=p.c;

s=p.s;

);

);

intmain()

(

doubler;

cout<<"請(qǐng)輸入半徑:"<<endl;

cin?r;

CircleR(r);

R.show();

CircleC(R);

C.show();

return0;

7.定義一個(gè)字符棧類Stack(包括類的實(shí)現(xiàn))。數(shù)據(jù)成員包括?個(gè)存放字符的數(shù)組stck口和一

個(gè)棧指針tos。棧數(shù)組的尺寸由常量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;

習(xí)題6

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

a)以多種格式輸出日期,如:

DDDYYYY

MM/DD/YY

June14,1992

b)用重載的構(gòu)造函數(shù)初始化Date類的對(duì)象。初始化值是a)中格式的數(shù)據(jù)。

c)構(gòu)造函數(shù)用頭文件time.h中的標(biāo)準(zhǔn)庫(kù)函數(shù)讀取系統(tǒng)的時(shí)間,把讀取的時(shí)間賦給Date的數(shù)

據(jù)成員。

#include<iostream>

#include<time.h>

usingnamespacestd;

classDate

(

private:

public:

)

intmain()

(

return0;

習(xí)題7

1.定義一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,使之能用于復(fù)數(shù)的加法運(yùn)算。將運(yùn)算符函數(shù)

重載為非成員、非友元的普通函數(shù)。編寫程序,求兩個(gè)復(fù)數(shù)之和。

#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<<"請(qǐng)輸入第一個(gè)復(fù)數(shù):"<<endl;

cin?al?bl;

Complexcl(alzbl)zc2zc;

coukv”請(qǐng)輸入第二個(gè)復(fù)數(shù):"<<endl;

cin?a2?b2;

c2.set(a2,b2);

c=cl+c2;

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

return0;

)

2.定義一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+「7”,使之能用于復(fù)數(shù)的加、減、

乘、除。運(yùn)算符重載函數(shù)作為Complex類的成員函數(shù)。編程序,分別求兩個(gè)復(fù)數(shù)之和、差、

積和商。

#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<<"請(qǐng)輸入第一個(gè)復(fù)數(shù):"?endl;

cin?al?bl;

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

cout<<”請(qǐng)輸入第二個(gè)復(fù)數(shù):"號(hào)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,定義一個(gè)復(fù)數(shù)類Complex,重載運(yùn)算符“+”,使之能用于復(fù)數(shù)的加法運(yùn)算。參加運(yùn)算的兩

個(gè)運(yùn)算量可以都是類對(duì)象,也可以其中有一個(gè)是整數(shù),順序任意。例如:

cl+c2J+cl,cl+i

均合法(設(shè)i為整數(shù),cl,c2為復(fù)數(shù))。編程序,分別求兩個(gè)復(fù)數(shù)之和、整數(shù)和復(fù)數(shù)之和。

#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<”請(qǐng)輸入第一個(gè)復(fù)數(shù):"<<endl;

cin?al?bl;

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

cout<<”請(qǐng)輸入第二個(gè)復(fù)數(shù):"<<endl;

cin?a2?b2;

c2.set(a2,b2);

c3=cl+c2;

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

cout<<”請(qǐng)輸入一個(gè)整數(shù):"<<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.有兩個(gè)矩陣a和b,均為2行3歹lj。求兩個(gè)矩陣之和。重載運(yùn)算符“+”,使之能用于矩陣

相加。如: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<<"請(qǐng)輸入矩陣:"<<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題的基礎(chǔ)匕重載流插入運(yùn)算符“<<”和流提取運(yùn)算符“>>”,使之能用于該矩陣

的輸入和輸出。

#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<<"請(qǐng)輸入矩陣:"<<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.請(qǐng)編寫程序,處理一個(gè)復(fù)數(shù)與一個(gè)double數(shù)相加的運(yùn)算,結(jié)果存放在一個(gè)double型的變

量dl中,輸HIa的值,再以復(fù)數(shù)形式輸出此值。定義Complex(復(fù)數(shù))類,在成員函數(shù)中包

含重載類型轉(zhuǎn)換運(yùn)算符: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<<”請(qǐng)輸入一個(gè)復(fù)數(shù):"<<endl;

cin?a?b;

Complexcl(a,b),c2;

cout<v"請(qǐng)輸入一個(gè)double數(shù):"<<endl;

cin?c;

d=c+cl;

cout?"d="?d?endl;

c2=Complex(d);

cout?"c2=";

c2.display();

return0;

)

7.定義一個(gè)Teacher(教師)類和一個(gè)Student(學(xué)生)類,二者有一部分?jǐn)?shù)據(jù)成員是相同的,例如

num(號(hào)碼),name(姓名),sex(性別)。編寫程序,將?個(gè)Student對(duì)象(學(xué)生)轉(zhuǎn)換為Teacher(教

師)類,只將以上3個(gè)相同的數(shù)據(jù)成員移植過(guò)去??梢栽O(shè)想為:一位學(xué)生大學(xué)畢業(yè)了,留校

擔(dān)任教師,他原有的部分?jǐn)?shù)據(jù)對(duì)現(xiàn)在的教師身份來(lái)說(shuō)仍然是有用的,應(yīng)當(dāng)保留并成為其教師

的數(shù)據(jù)的一部分。

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

)

習(xí)題8

1.定義一個(gè)字符棧類Stack(包括類的實(shí)現(xiàn))。數(shù)據(jù)成員包括一個(gè)存放字符的數(shù)組stck口和?

個(gè)棧指針tos。棧數(shù)組的尺寸由常量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;

)

習(xí)題十

1.創(chuàng)建一個(gè)類,具有public、private和protected數(shù)據(jù)成員和函數(shù)成員。創(chuàng)建該類的個(gè)

對(duì)象,看看試圖存取所有的類成員時(shí)會(huì)得到一些什么信息。編寫一個(gè)全局friend函數(shù)來(lái)訪問(wèn)

該類的私有數(shù)據(jù)成員。

#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.創(chuàng)建一個(gè)沒(méi)有任何構(gòu)造函數(shù)的類,顯示可以用缺省的構(gòu)造函數(shù)創(chuàng)建對(duì)象。然后為該類創(chuàng)

建一個(gè)非缺省的構(gòu)造函數(shù)(帶一個(gè)參數(shù)),試著再編譯一次,解釋發(fā)生的現(xiàn)象。

#include<iostream>

usingnamespacestd;

classcomplex

(

public:

complex(inta);

voidshow()

cout<<"可以用缺省的構(gòu)造函數(shù)創(chuàng)建對(duì)象々endl;

);

);

intmain()

complexc;

c.show();

return0;

)

3.建立一-個(gè)類,該類包含const成員函數(shù)和非const成員函數(shù),然后建立這個(gè)類的const

和非const對(duì)象。分別為這兩種類型的對(duì)象調(diào)用兩種成員函數(shù),解釋發(fā)生的現(xiàn)象。

#include<iostream>

usingnamespacestd;

classcomplex

(

private:

inta;

public:

complex(intx=0)

(

a=x;

};

intget()const

(

returna;

);

voidset(intx)

(

a=x;

);

);

intmain()

(

comp

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論