C++課程設(shè)計匯本復(fù)數(shù)計算器_第1頁
C++課程設(shè)計匯本復(fù)數(shù)計算器_第2頁
C++課程設(shè)計匯本復(fù)數(shù)計算器_第3頁
免費預(yù)覽已結(jié)束,剩余38頁可下載查看

下載本文檔

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

文檔簡介

1、C+課程設(shè)計實驗報告學(xué)號班級合作者學(xué)號班級任課教師時間教師指定題目復(fù)數(shù)計算器評定難易級別 A級實驗報告成績復(fù)數(shù)計算器程序功能設(shè)計1 . 程序功能的總體構(gòu)造復(fù)數(shù)計算器的程序總體功能可設(shè)計成如圖1所示, 可以看出,復(fù)數(shù)計算 器的各種功能都用菜單項選擇項列出,用戶可以根據(jù)需要選擇相應(yīng)的菜 單項,從而執(zhí)行不同的子程序以完成相應(yīng)的功能。2 .課程設(shè)計要求(1) 一開場運行程序,要有詳細的菜單項選擇項界面,用戶不選擇退出就 可以反復(fù)運算。(2) 可以進展多個操作數(shù)的復(fù)數(shù)運算,輸入 0 + 0興i時為止。(3) 編寫可以對輸入的復(fù)數(shù)求模的成員函數(shù)。(4) 編寫具有測試功能的函數(shù),即計算機能夠自動出題,并要求

2、用戶計算,同時計算機判斷用戶計算的對錯并打分,要求十題為一個單元,每題 一個運算符,運算符包括+,三種,參與加減運算實部虛部為一位數(shù)。(5) 重載輸入輸出運算符,對復(fù)數(shù)的輸入既可采用實部虛局部開提示輸入,也可直接輸入諸如a+或a+ib這種形式,對復(fù)數(shù)的輸出要考慮實部虛部的正負號,通過判斷給出的輸出結(jié)果。、開場輸岀菜單及提示信輸入選擇是否做加法2 / 33加法子程序Add減法子程序測試子程序完畢2.程序設(shè)計思想1類的封裝程序中將復(fù)數(shù)形式的數(shù)據(jù)定義成一個復(fù)數(shù)類 Cplex,重載了加法及減法等 運算符,使函數(shù)的加減等運算像一般數(shù)據(jù)一樣方便.每個運算符重載都用一個 函數(shù)去實現(xiàn)。參考類的定義如下:cla

3、ss Cplexprivate:double Real,lmage;public:Cplex(double real=0,double image=0)/構(gòu)造函數(shù)Real二real;lmage二image;friend istrea m&operator>>(istream&i s,Cplex&);friend ostream&operator<v(ostrea m&o s,Cplex&);/重載輸入/重載輸Cplex operator+(Cplex&);Cplex operator-(Cplex&);Cplex

4、 operator*(Cplex&);Cplex operator/(Cplex&);int operator=(Cplex&);int operator!=(Cplex&);int operator>(Cplex&);int operator<(Cplex&);/減法重載/乘法重載/除法重載float Module(void);/復(fù)數(shù)求模(2)設(shè)計的任務(wù)要求1在實際應(yīng)用中,輸入復(fù)數(shù)可能為a+bi, a, bi, -a, -bi, +i.-i.I等形式。重載輸入運算符應(yīng)該能識別這樣形式多樣的復(fù)數(shù)。所以在重載輸入函數(shù)時要19 / 33綜

5、合考慮上述各種輸入形式??尚械奶幚矸绞绞牵涸谥剌d輸入函數(shù)中,設(shè)計用(3)設(shè)計的任務(wù)要求2在程序中設(shè)計一個復(fù)數(shù)運算的測試函數(shù) Test,其功能是讓計算機 隨機出10道運算題,用戶給出答案,同時計算機實時判斷對錯并可 以打分。這個函數(shù)的關(guān)鍵是讓計算機隨機產(chǎn)生復(fù)數(shù)對象和運算符,計算機部有一個隨機數(shù)發(fā)生器,可以產(chǎn)生一個固定順序的整型隨機數(shù)序 列,調(diào)用語句為“ int a = rand ; 這時,a就是該隨機數(shù)發(fā)生 器產(chǎn)生的隨機數(shù)。由于產(chǎn)生的隨機書數(shù)在整數(shù)圍,為測試方便,按程序設(shè)計要求, 產(chǎn)生的隨機復(fù)數(shù)對象實部和虛部在 100以,運算符只有加減兩種。 因此,需要對產(chǎn)生的隨機數(shù)進展進一步的處理,用隨機數(shù)模

6、除以除以100,產(chǎn)生出100以的隨機整數(shù);同樣,用隨機數(shù)模除以 3,可以產(chǎn) 生出0、1、3三個隨機數(shù)據(jù),定義0為加法,1為減法,2為乘法, 這樣就可以產(chǎn)生出隨機的復(fù)數(shù)對象的加減乘運算了??梢詤⒁妶D2測試子程序Test丨構(gòu)造框圖。前兩個隨機數(shù)初始復(fù)數(shù)對象1 最后兩個隨機數(shù) 初始復(fù)數(shù)對象4輸出出錯信息輸出出錯信息輸出出錯信息總分加10總分加104丨設(shè)計的任務(wù)要求3a+bi ,在程序中重載了 >>運算符,其功能是讓用戶能夠直接輸入a+b*i兩種形式的復(fù)數(shù),其構(gòu)造框圖如圖 3所示。以字符串的形式 承受復(fù)數(shù)對象求字符串長度初試化當(dāng)前數(shù)值n=0,字符變量sign=1輸出錯誤信息,函數(shù)返回開場界

7、面NY3 r.將字符轉(zhuǎn)變?yōu)閿?shù)值"'D:4Debug3_ exemwMfIJi 運運運運W 加咸乘除計= W!連連連數(shù)較 求數(shù)數(shù)數(shù)數(shù)雖 數(shù)MSSAS出擇 復(fù)多多多多墓逋選運行結(jié)果界面當(dāng) *D; V4DeTbue3. exe*SI/題一加 運滙運運里 加感乘客- 星匡遠連數(shù)較 求數(shù)數(shù)數(shù)數(shù)星 數(shù)復(fù)復(fù)復(fù)M入數(shù)單 復(fù)多多多"詮鳥選 : -主冃 - M.a-MM mH f - 1 7 -兩個復(fù)數(shù),卜復(fù)數(shù)1+Zi寡二個復(fù)數(shù)l+2*i第三個復(fù)數(shù)i-l-2*i簞昨個冥救4 程序源代碼及詳細注解:# in clude<iostream.h># in clude<mat

8、h.h># in clude<stdlib.h># in clude<stri ng.h>#defi ne Z 1e-6class Cplexprivate:double Real,lmage;public:Cplex(double real=0,double image=0)/ 構(gòu)造函數(shù)Real=real;lmage=image;friend istrea m&operator»(istrea m&is,Cplex&);/重載輸入friend ostream&operator«(ostrea m&os,

9、Cplex&);/重載輸出Cplex operator+(Cplex&);Cplex operator-(Cplex&);/ 減法重載Cplex operator*(Cplex&);/ 乘法重載Cplex operator/(Cplex&);/ 除法重載int operator=(Cplex&);int operator!=(Cplex&);int operator>(Cplex&);int operator<(Cplex&);float Module(void);/ 復(fù)數(shù)求模;加法重載Cplex Cplex:

10、operator +(Cplex&)/定義類對象/實部相加/虛部相加Cplex t;t.Real=Real+.Real;tmage=lmage+.Im age;return t;Cplex Cplex:operator -(Cplex&) / 減法重載 Cplex t;/定義類對象t.Real=Real-.Real; / 實部相減tmage=Image-.Image;/ 虛部相減return t;Cplex Cplex:operator*(Cplex&) /乘法重載Cplex t;/定義類對象t.Real=Real*.Real-.Im age*Image;/乘法實部tm

11、 age=Real* .Im age+Image*.Real;/乘法虛部return t;Cplex Cplex:operator/(Cplex &)/除法重載Cplext;/定義類對象t.Real=(Real*.Real+lmage*.lmage)/(.Real*.Real+.lmage*.lmage);除法實部tm age=(Image*.Real-Real*m age)/(.Real*.Real+.Im age* .Im age);/除法虛部return t;/*int Cplex: operator!=(Cplex&)/ 重載“!="運算符,分別判斷復(fù)數(shù)的實部

12、與虛部if(*this=)return 0;elsereturn 1;*/int Cplex: operator>(Cplex&)/重載“ > "運算符,比擬復(fù)數(shù)的模if(Module()>.Module()return 1;/大于,那么返回1elsereturn 0;int Cplex: operator<(Cplex&)/重載“ < "運算符,比擬復(fù)數(shù)的模if(Module()v.Module()return 1;/小于,那么返回1elsereturn 0;float Cplex:Module()float t;t=sqrt

13、(Real*Real+lmage*lmage);return t;/cin .get();/cin .get();int Cplex:operator=(Cplex&)/重載“=運算符,分別判斷兩個復(fù)21 / 33數(shù)對象的實部與虛部if(Real=.Rea I&&I mage=.lm age)return 1;/實部與虛局部別相等返回1else return 0; void Add()Cplex a1,a2,sum,f(0,0);"<<e ndl;coutvv"加法計算"<<endlvv"最少輸入兩個復(fù)數(shù),

14、并以零完畢cout«"第一個復(fù)數(shù)"<<endl;cin> >a1;cout«"第二個復(fù)數(shù)"<<endl;cin> >a2;sum=a1+a2;cout«"第三個復(fù)數(shù)"<<endl;cin> >a1;int i=4;while(!(a 仁=f)sum=sum+a1;cin> >a1;i+;cout«" 結(jié)果"vvsumvvendl;cout«"按任意鍵繼續(xù)"<

15、<endl;cout.flush();ci n. get();void Sub()最少輸入兩個復(fù)數(shù),并以零完畢"<<e ndl;Cplex a1,a2,sub,f(0,0);cout«"減法計算"<<endlvv"cout«"第一個復(fù)數(shù)"<<endl; cin> >a1;cout«"第二個復(fù)數(shù)"<<endl;cin> >a2;sub=a1-a2;cout«"第三個復(fù)數(shù)"<&

16、lt;endl;cin> >a1;int i=4;while(!(a 仁=f)cout«"第"<<i<<"個復(fù)數(shù)"<<endl;sub=sub-a1;cin> >a1;i+;cout«" 結(jié)果:"vvsubvvendl;cout«"按任意鍵繼續(xù)"<<endl;cout.flush();ci n. get(); void Mul()Cplex a1,a2,mul,f(0,0);"<<e ndl;

17、coutvv"乘法計算"<<endlvv"最少輸入兩個復(fù)數(shù),并以零完畢cout«"第一個復(fù)數(shù)"<<endl;cin> >a1;cout«"第二個復(fù)數(shù)"<<endl;cin> >a2;mul=a1*a2;cout«"第三個復(fù)數(shù)"<<endl;22 / 33cout«"輸入兩個復(fù)數(shù):"<<endl;25 / 33cin> >a1;int i=4;while

18、(!(a 仁=f)mul=mul*a1;cout«"第"<<i<<"個復(fù)數(shù)"<<endl;cin> >a1;i+;cout«"結(jié)果:"vvmulvvendl;cout«"按任意鍵繼續(xù)"<<endl;cout.flush();ci n. get();void Div()Cplex a1,a2,div,f(0,0);"<<e ndl;coutvv"除法計算"<<endlvv&q

19、uot;最少輸入兩個復(fù)數(shù),并以零完畢cout«"第一個復(fù)數(shù)"<<endl;cin> >a1;cin> >a2;div=a1/a2;cout«"第三個復(fù)數(shù)"<<endl;cin> >a1;int i=4;while(!(a 仁=f)div=div/a1;cout«"第"<<i<<"個復(fù)數(shù)"<<endl;cin> >a1;i+;cout«"結(jié)果:"vvd

20、ivvvendl;cout«"按任意鍵繼續(xù)"<<endl;cout.flush();cin. get();void pare(void)復(fù)數(shù)模比擬cout«""<<e ndl;Cplex a1,a2;cout«"第一個復(fù)數(shù):cin> >a1;coutvv"第二個復(fù)數(shù)"cin> >a2;if(a1=a2)coutvv"這兩個復(fù)數(shù)相等"<<endl;else if(a1>a2)cout<<a1vv&qu

21、ot;的模大于"<<a2vv"的模"<<endl;else if(a1<a2)coutvvalvv"的模小于"v<a2<v"的模"<<endl; coutvv"按任意鍵繼續(xù)"<<endl;cin. get();/重載輸入,可以輸入istream& operator»(istream&is,Cplex&)a+bi,也可以輸入a+b*ichar s100;29 / 33is>>s;/字符串s用于接收

22、復(fù)數(shù)int len=strle n(s);int n=O,sign=1;n為當(dāng)前從字符串中提取出來的數(shù)字,初始化為0;sign為n的符號,初始化為正m age=.Real=O;if(le n=4)for(int k=O;k<len;k+)/判斷字符串是否合法if(skv'0'|sk>9 )&&(sk!='+'&&sk!='-'&&sk!='i')cout<v"Error"v<endl;/假設(shè)字符串不是19的數(shù)字或+ "、“-&qu

23、ot;、“ ="那么錯誤,輸出Errorreturn is;for(k=0;k<len;)/依次識別字符串中和字符if(n!=0&&(sk='-'|sk='+')/ 判斷是否為符號位.Real=sign*n; /是符號,且n!=0,n已被賦值,當(dāng)前讀取的是虛部的符號n=0;/將sign*n的值賦給實部,然后n清零,準(zhǔn)備承受虛部的值if(sk='-')sign=-1;k+;/給符號標(biāo)志賦值if(sk='+')sign=1;k+;/給符號標(biāo)志賦值 if(sk='i') II假設(shè)當(dāng)前字符為

24、iif(k!=len-1)II判斷i是否為最后一個字符cout<v"errorn"II假設(shè)不是,那么復(fù)數(shù)輸入格式錯誤elsem age=sig n*n;for(int k=O;k<len;k+)/依次識別字符串中和字符break;while(sk>='0'&&skv=9)/當(dāng)字符在09之間是,將數(shù)字字符轉(zhuǎn)化為數(shù)字?jǐn)?shù)值n=n *10+sk-'0'k+;if(slen-1!='i'&&n!=0)/如果最后一個字符不是i,表示復(fù)數(shù)只有實部,沒有虛部.Real=n *sig n;ret

25、urn is;elseif(skv'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i'&&sk!='*')那么錯/假設(shè)字符串不是19的數(shù)字或“ + ”、“ - ”、“ = ”誤,輸出Errorcout<v"Error"v<e ndl;return is;for(k=0;k<len;)/依次識別字符串中和字符if(n!=0&&(sk='-'

26、;|sk='+')/ 判斷是否為符號位.Real=sig n*n;n=0;if(sk='-')sign=-1;k+;/給符號標(biāo)志賦值31 / 33if(sk='+')sign=1;k+;/給符號標(biāo)志賦值if(sk='*')/假設(shè)當(dāng)前字符為*k+;m age=sig n*n; if(sk='i') II假設(shè)當(dāng)前字符為iif(k!=len-1)II判斷i是否為最后一個字符cout<v"errorn" II假設(shè)不是,那么復(fù)數(shù)輸入格式錯誤I/elsem age=sig n*n;break;whil

27、e(sk>='0'&&skv=9)/當(dāng)字符在09之間是,將數(shù)字字符轉(zhuǎn)化為數(shù)字?jǐn)?shù)值n=n *10+sk-'0'k+;if(slen-1!='i'&&n!=0)/如果最后一個字符不是i,表示復(fù)數(shù)只有實部,沒有虛部.Real=n *sig n;return is;ostrea m&operator«(ostrea m&os,Cplex&)/重載輸出if(fabs(.lmage)<Z)/ 如果虛部為零osvv.Real;/只輸出實部;else if(fabs(.Real)<

28、;Z)/ 如果實部為零os<v.lmage<v"i"/ 只輸出虛部else if(.Image>0)os<v.Realvv"+"vv.lmagevv"i"/ 虛部為正,用“ + "連接實部與虛部35 / 33elseosvv.Realv v.lm age«"i"/虛部為負,虛部的符號連接實部與虛部return os;void Test(void)double real1,real2,real3,real4,image1,image2,image3,image4;Cplex

29、 an swer,f5;int score=0;char op;for(int i=1;i<=10;i+)reaI仁rand()%200-100;/產(chǎn)生隨機的兩位數(shù),可正可負image仁ra nd()%200-100;real2=ra nd()%200-100;image2=ra nd()%200-100;Cplex f1(real1,image1),f2(real2,image2);/用隨機產(chǎn)生的兩位數(shù)初始化類對象real3=ra nd()%20-10;/產(chǎn)生隨機的一位數(shù)image3=ra nd()%20-10;real4=ra nd()%20-10;image4=ra nd()%20

30、-10;Cplex f3(real3,image3),f4(real4,image4);/用隨機產(chǎn)生的一位數(shù)初始化類對象op=rand()%3;/隨即產(chǎn)生3種運算符cout«"第"vvivv"題:"switch(op)case 0:an swer=f1+f2;cout<<f1<<" 加上"<<f2<<" 等于"break;case 1:an swer=f1-f2;cout<<f1<<" 減去"<<f2&

31、lt;<" 等于"break;case 2:/乘法用實部、虛部都是一位的對象an swer=f1*f2;cout<<f1<<" 乘以"<<f2<<" 等于"break; cin>>f5;if(an swer=f5)/判斷結(jié)果是否正確cout«"此題做對了 "'n'cout«"加十分:"<<'n'score+=10;/正確,加十分elsecoutvv"此題做錯了 "<<'n'cout«"不得分:"<<'n'/錯誤,不得分cout«" 你的最后得分為:"vvscorevvendl;void main(void)/輸出程序主菜單,并接收用戶選擇char in put;Cplex a,b,c,d,e,f,g;system("cls");cout<<"t這是一個復(fù)數(shù)計算器程序,擁有以下功能,請按照菜單項選擇擇進入功能。"<<e ndl«

溫馨提示

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

評論

0/150

提交評論