




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C+W程設計實驗報告姓名 學號 班級合作者學號 班級任課教師時間教師指定題目復數(shù)計算器 評定難易級別A級實驗報告成績復數(shù)計算器程序功能設計1 . 程序功能的總體結構復數(shù)計算器的程序總體功能可設計成如圖1所示,可以看出,復數(shù)計算器的 各種功能都用菜單項選擇項列出,用戶可以根據(jù)需要選擇相應的菜單項,從而執(zhí) 行不同的子程序以完成相應的功能.2 .課程設計要求(1) 一開始運行程序,要有詳細的菜單項選擇項界面,用戶不選擇退出就可以反復運 算.(2)可以進行多個操作數(shù)的復數(shù)運算,輸入 0 + 0* i時為止.(3)編寫可以對輸入的復數(shù)求模的成員函數(shù).(4)編寫具有測試功能的函數(shù),即計算機能夠自動出題,并
2、要求用戶計算,同時 計算機判斷用戶計算的對錯并打分,要求十題為一個單元,每題一個運算符, 運算符包括+, , *三種,參與加減運算實部虛部為一位數(shù).(5)重載輸入輸出運算符,對復數(shù)的輸入既可采用實部虛局部開提示輸入, 也可 直接輸入諸如a+i *b或a+i b這種形式, 對復數(shù)的輸出要考慮實部虛1類的封裝程序中將復數(shù)形式的數(shù)據(jù)定義成一個復數(shù)類CComplex,重載了加法及減法等運算符,使函數(shù)的加減等運算像一般數(shù)據(jù)一樣方便.每個運算符重載都用一個函數(shù)去實現(xiàn).參考類的定義如下:class CComplexprivate:double Real,Image;public:CComplex(doubl
3、e 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. I等形式.重載輸入運算符應該能
5、識別這樣形式多樣的復數(shù).所以在重載輸入函數(shù)時要綜合考 慮上述各種輸入形式.可行的處理方式是:在重載輸入函數(shù)中,設計用(3)設計的任務要求2在程序中設計一個復數(shù)運算的測試函數(shù) Test (),其功能是讓計算機隨機 出10道運算題,用戶給出答案,同時計算機實時判斷對錯并可以打分.這個函數(shù)的關鍵是讓計算機隨機產生復數(shù)對象和運算符,計算機內部有一個隨機數(shù)發(fā)生器,可以產生一個固定順序的整型隨機數(shù)序列,調用語句為“int a = rand();這時,a就是該隨機數(shù)發(fā)生器產生的隨機數(shù).由于產生的隨機書數(shù)在整數(shù)范圍內,為測試方便,按程序設計要求,產生的隨機復數(shù)對象實部和虛部在 100以內,運算符只有加減兩種.
6、因此,需要對產生的隨機數(shù)進行進一步的處理,用隨機數(shù)模除以除以100,產生出100以內的隨機整數(shù);同樣,用隨機數(shù)模除以 3,可以產生出0、1、3 三個隨機數(shù)據(jù),定義0為加法,1為減法,2為乘法,這樣就可以產生出 隨機的復數(shù)對象的加減乘運算了. 可以參見圖2測試子程序Test ()結構 框圖.設置循環(huán)次數(shù)為產牛8個前兩個隨機最后兩個隨NYOpNNY輸出出錯信輸出出錯信以字符串的符串長度Y產生2以內Y 輸出出錯信設計的任務要求3種形式的復數(shù),其結構框圖如圖 3所示在程序中重載了 >>運算符,其功能是讓用戶能夠直接輸入a+bi , a+b*i后兩個隨機兩對象相用戶輸入結輸出錯誤信息,函數(shù)N
7、NY將字符轉變?yōu)閿?shù)3 . 程序界面開始界面運行結果界面4 .程序源代碼及詳細注解:# include<iostream.h># include<math.h># include<stdlib.h># include<string.h># define Z 1e-6class CComplexprivate:double Real,Image;public:CComplex(double real=0,double image=0) /構造函數(shù)Real=real;Image=image;重載輸入重載輸出friend istream&oper
8、ator>>(istream&is,CComplex&com); / friend ostream&operator<<(ostream&os,CComplex&com); / CComplex operator+(CComplex&com);CComplex operator-(CComplex&com); / 減法重載 CComplex operator*(CComplex&com); /乘法重載CComplex operator/(CComplex&com); /除法重載int operato
9、r=(CComplex&com);int operator!=(CComplex&com);int operator>(CComplex&com);int operator<(CComplex&com);float Module(void); /復數(shù)求模;CComplex CComplex:operator +(CComplex&com) /加法重載(CComplex t;/定義類對象t.Real=Real+com.Real; / 實部相加t.Image=Image+com.Image; / 虛部相加 return t;)CComplex C
10、Complex: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-com.Image*Image; /乘法實部t.Image=Real*com.Image+Image*com.Real; /乘法虛部return t;)C
11、Complex CComplex:operator/(CComplex &com) /除法重載(CComplext;/定義類對象t.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image);/除法實部t.Image=(Image*com.Real-Real*com.Image)/(com.Real*com.Real+com.Image*com.Image);/除法虛部return t;)/*int CComplex: operator!=(CComplex&com) / 重載 “!=
12、 運算符,分別判斷復 數(shù)的實部與虛部(if(*this=com)return 0;elsereturn 1;*/int CComplex: operator>(CComplex&com) / 重載“ >運算符,比擬復數(shù)的模 (if(Module()>com.Module()return 1;/ 大于,那么返回1elsereturn 0; )int CComplex: operator<(CComplex&com) / 重載“ <運算符,比擬復數(shù)的模 (if(Module()<com.Module() return 1;/ 小于,那么返回1el
13、se return 0; ) float CComplex:Module() (float t;t=sqrt(Real*Real+Image*Image); return t; / cin.get(); / cin.get(); ) int CComplex:operator=(CComplex&com) / 重載“二二運算符,分別判斷兩 個復數(shù)對象的實部與虛部 (if(Real=com.Real&&Image=com.Image) return 1;/實部與虛局部別相等返回1else return 0; ) void Add() CComplex a1,a2,sum,
14、f(0,0); cout<<"加法計算"<<endl<<"最少輸入兩個復數(shù),并以零結束"<<endl; cout<<"第一個復數(shù)"<<endl; cin>>a1; cout<<"第二個復數(shù)"<<endl; cin>>a2; sum=a1+a2; cout<<"第三個復數(shù)"<<endl; cin>>a1; int i=4; while(!(a1
15、=f) sum=sum+a1; cout<<"第"<<i<<"個復數(shù)"<<endl; cin>>a1; i+; ) cout<<"結果"<<sum<<endl; cout<<"按任意鍵繼續(xù)"<<endl; /cout.flush();cin.get();)void Sub()CComplex a1,a2,sub,f(0,0);cout<<"減法計算"<<
16、endl<<"最少輸入兩個復數(shù),并以零結束"<<endl;cout<<"第一個復數(shù)"<<endl;cin>>a1;cout<<"第二個復數(shù)"<<endl;cin>>a2;sub=a1-a2;cout<<"第三個復數(shù)"<<endl;cin>>a1;int i=4;while(!(a1=f)sub=sub-a1;cout<<"第"<<i<&
17、lt;"個復數(shù)"<<endl;cin>>a1;i+;)cout<<"結果:"<<sub<<endl;cout<<"按任意鍵繼續(xù)"<<endl;/cout.flush();cin.get();)void Mul()CComplex a1,a2,mul,f(0,0);cout<<"乘法計算"<<endl<<"最少輸入兩個復數(shù),并以零結束"<<endl;cout<&
18、lt;"第一個復數(shù)"<<endl;cin>>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<<
19、;“結果:"<<mul<<endl;cout<<"按任意鍵繼續(xù)"<<endl;/cout.flush();cin.get();)void Div()CComplex a1 ,a2,div,f(0,0);II«endl;cout«"除法計算"vvendlvv最少輸入兩個復數(shù),并以零結束cout«"第一個復數(shù) cin»a1;cout«"第二個復數(shù)cin»a2;div=a1/a2;cout«"第三個復數(shù)c
20、in»a1;int i=4;while(!(a1=f)II«endl;II«endl;II«endl;div=div/a1;cout«"個復數(shù)"vvendl;cin»a1;i+;)cout«"結果:"«div«endl;cout«"按任意鍵繼續(xù)"«endl;/cout.flush();cin.get();)void Compare(void)cout«""«endl;CComplex a
21、1,a2;cout«"輸入兩個復數(shù):"«endl;cout«"第一個復數(shù):cin»a1;cout«"第二個復數(shù)cin»a2;if(a1=a2)cout«"這兩個復數(shù)相等"«endl;else if(a1>a2)cout«a1«"的模大于"vva2vv 的?!皏vendl;else if(a1<a2)cout«a1«"的模小于"vva2vv 的?!皏vendl;cou
22、t«"按任意鍵繼續(xù)"«endl;cin.get();)istream& operator»(istream&is,CComplex&com) /復數(shù)模比擬重載輸入,可以輸入a+bi,也可以輸入a+b*ichar s100;is>>s;int len=strlen(s);int n=0,sign=1; /nn的符號,初始化為正com.Image=com.Real=0; if(len=4)(for(int k=0;k<len;k+)(/字符串s用于接收復數(shù)為當前從字符串中提取出來的數(shù)字,初始化為0; sig
23、n為/判斷字符串是否合法if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i') (cout<<"Error"<<endl; /那么錯誤,輸出Errorreturn is;假設字符串不是19的數(shù)字或“+、“-、“二)for(k=0;k<len;)(/依次識別字符串中和字符if(n!=0&&(sk='-'|sk='+') (c
24、om.Real=sign*n; /判斷是否為符號位是符號,且n!=0,n已被賦值,當前讀取的是虛部的符號n=0; /將sign*n的值賦給實部,然后n清零,準備接受虛部的值)if(sk='-')(sign=-1;k+;)if(sk='+')(sign=1;k+;)if(sk='i') /(if(k!=len-1) /給符號標志賦值給符號標志賦值假設當前字符為i判斷i是否為最后一個字符cout<<"errorn" /假設不是,那么復數(shù)輸入格式錯誤elsecom.Image=sign*n;/是最后一個字符,復數(shù)對象已接
25、收完畢,用 sign*n給虛部賦值 break;當字符在09之間是,將數(shù)字字符轉化為)while(sk>='0'&&sk<='9') /數(shù)字數(shù)值(n=n*10+sk-'0' k+;) ) if(slen-1!='i'&&n!=0) /如果最后一個字符不是i ,表示復數(shù)只有實部,沒有虛部com.Real=n*sign; return is; ) else ( for(int k=0;k<len;k+)/依次識別字符串中和字符(if(sk<'0'|sk>
26、39;9')&&(sk!='+'&&sk!='-'&&sk!='i'&&sk!='*')/假設字符串不是19的數(shù)字或“+、“-、“二、 那么錯誤,輸出Error (cout<<"Error"<<endl; return is;) ) for(k=0;k<len;) /依次識別字符串中和字符(if(n!=0&&(sk='-'|sk='+') /判斷是否為符號位( c
27、om.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') /假設當前字符為i(if(k!=len-1) / 判斷i是否為最后一個字符cout<<"errorn" /假設不是,那么復數(shù)輸入格式錯誤/else/com.Image=sign*n;break;while(sk>
28、;='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,CComplex&com) /重載輸出(if(fabs(com.Image)<Z) /如果虛部為零os<<com.Re
29、al; / 只輸出實部;else if(fabs(com.Real)<Z)/os<<com.Image<<"i"/else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i"部elseos<<com.Real<<com.Image<<"i" /如果實部為零只輸出虛部/ 虛部為正,用“+連接實部與虛虛部為負,虛部的符號連接實部與虛部return os;v
30、oid 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;/產生隨機的兩位數(shù),可正可負image1=rand()%200-100;real2=rand()%200-100;image2=rand()%200-100;CComplex f1(real1,image1),f2(real2,image2);/用隨機產生的兩位數(shù)初始化類對象real
31、3=rand()%20-10;/產生隨機的一位數(shù)image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4);/用隨機產生的一位數(shù)初始化類對象op=rand()%3; /隨即產生3種運算符cout<<"第"<<i<<"題:";switch(op)case 0:answer=f1+f2;cout<<f1<<"力口上"<<f2&
32、lt;<"等于"; break;case 1:answer=f1-f2;cout<<f1<<"減去"<<f2<<"等于";break;case 2: /乘法用實部、虛部都是一位的對象answer=f1*f2;cout<<f1<<"乘以"<<f2<<"等于"; break;cin>>f5;if(answer=f5) /判斷結果是否正確cout<<此題做對了 "&l
33、t;<'n'cout<<" 加十分:"<<'n'score+=10; / 正確,加十分elsecout<<此題做錯了 "<<'n'cout<<"不得分:"<<'n' / 錯誤,不得分cout<<"你的最后彳3分為:"<<score<<endl;void main(void) /輸出程序主菜單,并接收用戶選擇char input;CComplex a,b,c,d,e,f,g;system("cls");cout<<"t這是一個復數(shù)計算器程序,擁有以下功能,請根據(jù)菜單項選擇擇進入功
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買賣公雞廣告合同范本
- 中醫(yī)門診合同范本
- 2025中國冶金地質總局所屬在京單位高校畢業(yè)生招聘23人筆試參考題庫附帶答案詳解
- 修車廠勞務合同范本
- 個體服裝購銷合同范本6
- 產品合伙合同范本
- 代購分期購車合同范本
- Starter Unit 3 Section B project 教學設計- 2024-2025學年人教版七年級英語上冊
- 企業(yè)食堂用工合同范本
- 勞務搬家合同范本
- 農機安全知識講座
- 《1億有多大》(說課稿)-2024-2025學年四年級上冊數(shù)學人教版001
- DeepSeek從入門到精通 -指導手冊
- 校長第一次全體教師會上發(fā)言:2025春季開學教師掌握這 6 詞教育之路暢通無阻
- 2025年蘇州經貿職業(yè)技術學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 衰老細胞代謝重編程-洞察分析
- 發(fā)票知識培訓課件
- 化工開停車培訓
- 貨物學 課件1.1貨物的基本概念與內涵
- 《綜合辦崗位職責》課件
- (2024年)中國傳統(tǒng)文化介紹課件
評論
0/150
提交評論