




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C+課程設計實驗報告姓名學號班級合作者學號班級任課教師時間教師指定題目復數(shù)計算器評定難易級別A級實驗報告成績復數(shù)計算器程序功能設計1 程序功能的總體結構復數(shù)計算器的程序總體功能可設計成如圖1所示, 可以看出,復數(shù)計算器的各種功能都用菜單選項列出,用戶可以根據(jù)需要選擇相應的菜單 項,從而執(zhí)行不同的子程序以完成相應的功能。2課程設計要求1)一開始運行程序,要有詳細的菜單選項界面,用戶不選擇退出就可以 反復運算。2)可以進行多個操作數(shù)的復數(shù)運算,輸入 00i 時為止。3)編寫可以對輸入的復數(shù)求模的成員函數(shù)。4)編寫具有測試功能的函數(shù), 即計算機能夠自動出題, 并要求用戶計算, 同時計算機判斷用戶計算
2、的對錯并打分,要求十題為一個單元,每題 一個運算符,運算符包括,三種,參與加減運算實部虛部為 一位數(shù)。5)重載輸入輸出運算符, 對復數(shù)的輸入既可采用實部虛部分開提示輸入,也可直接輸入諸如a +或a+ib這種形式,對復數(shù)的輸出要考慮實部虛部的正負號,通過判斷給出的輸出結果。2.程序設計思想1)類的封裝程序中將復數(shù)形式的數(shù)據(jù)定義成一個復數(shù)類 CComplex,重載了加法及減 法等運算符,使函數(shù)的加減等運算像一般數(shù)據(jù)一樣方便每個運算符重載都用 一個函數(shù)去實現(xiàn)。參考類的定義如下:class CComplexprivate:double Real,Image;public:CComplex(double
3、 real=0,double image=0) / 構造函數(shù) Real=real;Image=image;/重載輸入/重載輸friend istream&operator>>(istream&is,CComplex&com);friend ostream&operator<<(ostream&os,CComplex&com); 出CComplex operator+(CComplex&com);CComplex operator-(CComplex&com); / 減法重載CComplex operator
4、*(CComplex&com); / 乘法重載CComplex operator/(CComplex&com); / 除法重載int operator=(CComplex&com);int operator!=(CComplex&com);int operator>(CComplex&com);int operator<(CComplex&com);float Module(void);/復數(shù)求模;(2)設計的任務要求 1在實際應用中,輸入復數(shù)可能為a+bi, a, bi, -a, -bi, +i. -. I等形式。重載 輸入運算符應
5、該能識別這樣形式多樣的復數(shù)。 所以在重載輸入函數(shù)時要綜合 考慮上述各種輸入形式??尚械奶幚矸绞绞牵涸谥剌d輸入函數(shù)中,設計用(3)設計的任務要求 2在程序中設計一個復數(shù)運算的測試函數(shù) Test (),其功能是讓計算機 隨機出 10 道運算題,用戶給出答案,同時計算機實時判斷對錯并可 以打分。這個函數(shù)的關鍵是讓計算機隨機產(chǎn)生復數(shù)對象和運算符, 計 算機內(nèi)部有一個隨機數(shù)發(fā)生器, 可以產(chǎn)生一個固定順序的整型隨機數(shù) 序列,調(diào)用語句為“ int a = rand ();”這時,a就是該隨機數(shù)發(fā)生器 產(chǎn)生的隨機數(shù)。由于產(chǎn)生的隨機書數(shù)在整數(shù)范圍內(nèi),為測試方便,按程序設計要 求,產(chǎn)生的隨機復數(shù)對象實部和虛部在
6、100以內(nèi),運算符只有加減兩 種。因此,需要對產(chǎn)生的隨機數(shù)進行進一步的處理, 用隨機數(shù)模除以 除以 100,產(chǎn)生出 100以內(nèi)的隨機整數(shù);同樣,用隨機數(shù)模除以 3, 可以產(chǎn)生出 0、 1、3 三個隨機數(shù)據(jù),定義 0 為加法, 1 為減法, 2 為乘法,這樣就可以產(chǎn)生出隨機的復數(shù)對象的加減乘運算了。 可以參 見圖2測試子程序Test ()結構框圖。設置循環(huán)次數(shù)為10(4)設計的任務要求3a+bi,在程序中重載了 >>運算符,其功能是讓用戶能夠直接輸入a+b*i兩種形式的復數(shù),其結構框圖如圖 3所示。以字符串的形式 接受復數(shù)對象求字符串長度初試化當前數(shù)值n=0,字符變量sign=1YY
7、N字符串是否存在非法字符是否判別完字符 串中所有字符最后一個字符不是i'且 n! =0當前字符為+、一號同時n! =0當前字符是否是為 i'N當前字符是否是 +N當前字符是否是_'輸出錯誤信息,函數(shù)返回前面取出的數(shù)值賦給實部,n=0Sign= 1, k+Sign=1 , k+結束N1r復數(shù)對象只有實部,前面 取出的數(shù)值賦給實部Ni'是否是最后一個字符YYNNY當前字符是 否是數(shù)字輸出錯誤信 息,函數(shù)返回將字符轉變?yōu)閿?shù)值3.程序界面開始界面Em六 *D:4Debuc3.eie*這是一個復數(shù)計算器程序,擁有以下功能.請按照蘋單喘擇進入功能。一次十題)試 運運運垣ff
8、 nun - 求數(shù)婁數(shù)數(shù)罷 數(shù)復W復復入數(shù)出擇 復書事進逞選 !二, * 主冃 12345E7Q0 運行結果界面:4Debug3.eze題十次一試 運運運運算 加 - 量連連連數(shù)較 求數(shù)數(shù)數(shù)數(shù)帛 數(shù)復復復復入數(shù)岀擇 復哆哆哆哆:a爲選 12345678 請 4乘法址算巖少輸入兩個復數(shù),并以零結東 障一不復數(shù)l+2i帯二個復數(shù)l+2*i帯三個復數(shù)kl-2*i帚4個復數(shù)0+0i* 吉果:11+21隈任意犍繼續(xù)4 程序源代碼及詳細注解:# in clude<iostream.h># in clude<math.h># in clude<stdlib.h># in
9、clude<stri ng.h>#defi ne Z 1e-6class CComplexprivate:double Real,lmage;public:CComplex(double real=0,double image=0)/ 構造函數(shù)Real=real;lmage=image;friend istream&operator»(istream&is,CComplex&com);/重載輸入friend ostream&operator<<(ostream&os,CComplex&com);/重載輸出CCom
10、plex operator+(CComplex&com);CComplex operator-(CComplex&com);/ 減法重載CComplex operator*(CComplex&com);/ 乘法重載CComplex operator/(CComplex&com); / 除法重載 int operator=(CComplex&com);int operator!=(CComplex&com);int operator>(CComplex&com);int operator<(CComplex&com);f
11、loat Module(void); / 復數(shù)求模;CComplex CComplex:operator +(CComplex&com) / 加法重載CComplex t;/ 定義類對象t.Real=Real+com.Real;/實部相加t.Image=Image+com.Image;/ 虛部相加return t;CComplex CComplex:operator -(CComplex&com) /減法重載CComplex t; / 定義類對象 t.Real=Real-com.Real; /實部相減 t.Image=Image-com.Image; /虛部相減 return
12、t;CComplex CComplex:operator*(CComplex&com) / 乘法重載CComplex t;/定義類對象t.Real=Real*com.Real-com.Image*Image; / 乘法實部 t.Image=Real*com.Image+Image*com.Real;/乘法虛部return t;CComplex CComplex:operator/(CComplex &com) / 除法重載CComplex t; /定義類對象t.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com
13、.Image*c om.lmage);/除法實部t.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image* com.lmage);/除法虛部return t;/*int CComplex: operator!=(CComplex&com)/重載“! =”運算符,分別判斷復數(shù)的實部與虛部if(*this=com)return 0;elsereturn 1;*/int CComplex: operator>(CComplex&com)/ 重載“>”運算符,比較復數(shù)的模if(Module()&
14、gt;com.Module()return 1;/ 大于,則返回 1elsereturn 0;int CComplex: operator<(CComplex&com)/重載“<”運算符,比較復數(shù)的模if(Module()<com.Module()return 1;/小于,則返回 1elsereturn 0;float CComplex:Module()float t;t=sqrt(Real*Real+Image*Image);return t;/ cin.get();/ cin.get();int CComplex:operator=(CComplex&co
15、m)/重載“ =”運算符,分別判斷兩個復數(shù)對象的實部與虛部 if(Real=com.Real&&Image=com.Image)return 1;/實部與虛部分別相等返回 1else return 0;void Add()CComplex a1,a2,sum,f(0,0);coutvv"加法計算"<<endlvv"最少輸入兩個復數(shù),并以零結束 cout«"第一個復數(shù)"<<endl;cin>>a1;cout«"第二個復數(shù)"<<endl;cin&
16、gt;>a2;sum=a1+a2;cout«"第三個復數(shù)"<<endl;cin>>a1;int i=4;while(!(a1=f)sum=sum+a1;cout«"第"<<i<<"個復數(shù)"<<endl;cin>>a1;i+;cout«"結果"vvsumvve ndl;co u t < < "按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get()
17、;void Sub()CComplex a1,a2,sub,f(0,0);coutvv"減法計算"<<endlvv"最少輸入兩個復數(shù),并以零結束 cout«"第一個復數(shù)"<<endl;cin>>a1;coutvv"第二個復數(shù)"<<endl;cin>>a2;sub=a1-a2;coutvv"第三個復數(shù)"vvendl;cin>>a1;int i=4;while(!(a1=f)sub=sub-a1;coutvv"第&qu
18、ot;vvivv"個復數(shù)"vvendl;cin>>a1;i+;coutvv"結果:"vvsubvvendl;co u t v v "按任意鍵繼續(xù) "vvendl;/cout.flush();"vvendl;"vvendl;cin.get();void Mul()CComplex a1,a2,mul,f(0,0);coutvv"乘法計算"<<endlvv"最少輸入兩個復數(shù),并以零結束cout«"第一個復數(shù)"<<endl;c
19、in>>a1;cout«"第二個復數(shù)"<<endl;cin>>a2;mul=a1*a2;cout«"第三個復數(shù)"<<endl;cin>>a1;int i=4;while(!(a1=f)mul=mul*a1;cout«"第"<<i<<"個復數(shù)"<<endl;cin>>a1;i+;cout«"結果:"vvmulvvendl;co u t < <
20、; "按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Div()CComplex a1,a2,div,f(0,0);coutvv"除法計算"<<endlvv"最少輸入兩個復數(shù),并以零結束cout«"第一個復數(shù)"<<endl;cin>>a1;coutvv"第二個復數(shù)"<<endl;cin>>a2;div=a1/a2;coutvv"第三個復數(shù)"vvendl;cin>
21、;>a1;int i=4;while(!(a1=f)div=div/a1;coutvv"第"vvivv"個復數(shù)"vvendl;"vvendl;"vvendl;cin>>a1;i+;復數(shù)模比較/重載輸入,可以輸for(int k=0;k<len;k+)/判斷字符串是否合法cout«"結果:"vvdivvvendl; co u t < < "按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Compare
22、(void)cout<<""<<endl;CComplex a1,a2;cout«"輸入兩個復數(shù):"<<endl;cout«"第一個復數(shù):"cin>>a1;cout«"第二個復數(shù)"cin>>a2;if(a1=a2)cout«"這兩個復數(shù)相等"<<endl;else if(a1>a2)cout<<a1<<"的模大于"<<a2&
23、lt;<"的模"<<endl; else if(a1<a2)coutvvalvv"的模小于"<<a2<<"的模"<<endl; cout«"按任意鍵繼續(xù)"<<endl;cin.get();istream& operator>>(istream&is,CComplex&com)入a+bi,也可以輸入a+b*ichar s100;is>>s;/字符串 s 用于接收復數(shù)int len=strl
24、en(s);int n=0,sign=1;/n 為當前從字符串中提取出來的數(shù)字,初始化為0;sign為 n 的符號,初始化為正com.Image=com.Real=0;if(len=4)if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i')cout<<"Error"<<endl;/若字符串不是 19 的數(shù)字或“ +”、“-”、“ =”則錯誤,輸出 Errorreturn is
25、; for(k=0;k<len;) /依次識別字符串中和字符if(n!=0&&(sk='-'|sk='+')/判斷是否為符號位com.Real=sign*n;/是符號,且 n!=0,n 已被賦值,當前讀取的是虛部的符號n=0; /將 sign*n 的值賦給實部,然后 n 清零,準備接受虛部的值 if(sk='-')sign=-1;k+; /給符號標志賦值 if(sk='+')sign=1;k+;/ 給符號標志賦值if(sk='i')/若當前字符為 iif(k!=len-1)/判斷 i 是否為最
26、后一個字符cout<<"errorn" / 若不是,則復數(shù)輸入格式錯誤 elsecom.Image=sign*n; /是最后一個字符,復數(shù)對象已接收完畢,用 sign*n 給虛部賦值 break;while(sk>='0'&&sk<='9') /當字符在 09 之間是,將數(shù)字字符轉化 為數(shù)字數(shù)值n=n*10+sk-'0'k+;if(sle n-1!='i'&&n !=0)如果最后一個字符不是i,表示復數(shù)只有實部,沒有虛部com.Real=n*sign;re
27、turn is;elsefor(int k=0;k<len;k+)/依次識別字符串中和字符if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i'&&sk!='*') /若字符串不是 19 的數(shù)字或“ +”、“- ”、“ =”、“ * ”則錯誤,輸出 Error cout<<"Error"<<endl; return is; for(k=0;
28、k<len;)/依次識別字符串中和字符if(n!=0&&(sk='-'|sk='+')/判斷是否為符號位 com.Real=sign*n; n=0;if(sk='-') sign=-1;k+; /給符號標志賦值if(sk='+') sign=1;k+;/給符號標志賦值if(sk='*')/若當前字符為 *k+; com.Image=sign*n;if(sk='i')/若當前字符為 iif(k!=len-1)/判斷 i 是否為最后一個字符cout<<"err
29、orn" / 若不是,則復數(shù)輸入格式錯誤 /else/com.Image=sign*n;break;while(sk>='0'&&sk<='9')/當字符在 09 之間是,將數(shù)字字符轉化為數(shù)字數(shù)值 n=n*10+sk-'0' k+; if(slen-1!='i'&&n!=0)/如果最后一個字符不是 i ,表示復數(shù)只有實部,沒有虛部com.Real=n*sign;return is; ostream&operator<<(ostream&os,CCom
30、plex&com) /重載輸出if(fabs(com.Image)<Z)/ 如果虛部為零os<<com.Real;/只輸出實部;else if(fabs(com.Real)<Z)/如果實部為零os<<com.Image<<"i"/ 只輸出虛部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i" /虛部為正,用“ +”連接實部 與虛部 elseos<<com.Re
31、al<<com.Image<<"i" /虛部為負,虛部的符號連接實部與虛 部return os;void Test(void)double real1,real2,real3,real4,image1,image2,image3,image4;CComplex answer,f5;int score=0;char op;for(int i=1;i<=10;i+)real1=rand()%200-100;/ 產(chǎn)生隨機的兩位數(shù),可正可負image1=rand()%200-100;real2=rand()%200-100;image2=rand()%
32、200-100;CComplex f1(real1,image1),f2(real2,image2); /用隨機產(chǎn)生的兩位數(shù)初始化類對象 real3=rand()%20-10;/產(chǎn)生隨機的一位數(shù)image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4); /用隨機產(chǎn)生的一位數(shù)初始化類對象 op=rand()%3; / 隨即產(chǎn)生 3 種運算符 coutvv"第"vvivv"題:"; switch(op) case
33、0: answer=f1+f2;coutvvflvv"加上"vvf2vv"等于"break;case 1:answer=f1-f2;coutvvflvv"減去"<<f2<<"等于"break;case 2:/乘法用實部、虛部都是一位的對象answer=f1*f2;coutvvflvv"乘以"vvf2vv"等于"break;cin>>f5;if(answer=f5)/判斷結果是否正確coutvv"此題做對了 "vv'
34、;n'coutvv"加十分:"vv'n'score+=10;/正確,加十分elsecoutvv"此題做錯了 "vv'n'coutvv"不得分:"vv'n'/錯誤,不得分cout<<" 你的最后得分為: "<<score<<endl;void main(void)/輸出程序主菜單,并接收用戶選擇char input;CComplex a,b,c,d,e,f,g;system("cls");cout<<"t 這是一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學心理教育家長教育妙招你贏了孩子還是贏得孩子
- 連云港專版2024中考地理復習方案第四部分中國地理上第14課時中國的地形強化訓練
- 財務管理軟件在醫(yī)療行業(yè)的應用與挑戰(zhàn)
- 學校電梯銷售合同范本
- 跨領域合作中的談判技巧與溝通方法
- 金融市場變化下的企業(yè)財務風險管理
- 跨文化背景下的公務禮儀策略
- 跨行業(yè)視角下的財務舞弊及審計應對
- 河北2025年01月河北省廣宗縣2025年公開招考38名事業(yè)單位工作人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 石油配資合同范本
- 雙均線策略(TBQ版)
- 北京房屋租賃合同電子版7篇
- 《園林機械使用與維修》課件-任務3.園林養(yǎng)護機械
- deepseek-r1論文-中文翻譯版
- 項目式學習在小學數(shù)學教學中的應用
- 2025年中遠海運物流有限公司招聘筆試參考題庫含答案解析
- 2025中智集團下屬單位公開招聘41人高頻重點提升(共500題)附帶答案詳解
- 設備維修的基本技能培訓
- 產(chǎn)后腹直肌分離治療
- 2025年中國郵政招聘筆試參考題庫含答案解析
- 人教版(2024)七年級英語上冊新教材的變化及教學建議課件
評論
0/150
提交評論