版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C課程設(shè)計(jì)復(fù)數(shù)計(jì)算器C+課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告姓名 學(xué)號班級_合作者 學(xué)號班級任課教師時(shí)間教師指定題目 復(fù)數(shù)計(jì)算器評定難易級別 A級實(shí)驗(yàn)報(bào)告成績C 課程設(shè)計(jì)復(fù)數(shù)計(jì)算器復(fù)數(shù)計(jì)算器程序功能設(shè)計(jì)1 程序功能的總體結(jié)構(gòu)復(fù)數(shù)計(jì)算器的程序總體功能可設(shè)計(jì)成如圖1所示,可以看出,復(fù)數(shù)計(jì)算器的 各種功能都用菜單選項(xiàng)列出,用戶可以根據(jù)需要選擇相應(yīng)的菜單項(xiàng),從而執(zhí) 行不同的子程序以完成相應(yīng)的功能。2課程設(shè)計(jì)要求(1)一開始運(yùn)行程序, 要有詳細(xì)的菜單選項(xiàng)界面, 用戶不選擇退出就可以反復(fù)運(yùn) 算。( 2)可以進(jìn)行多個(gè)操作數(shù)的復(fù)數(shù)運(yùn)算,輸入 00i 時(shí)為止。(3)編寫可以對輸入的復(fù)數(shù)求模的成員函數(shù)。(4)編寫具有測試功能的函數(shù),
2、 即計(jì)算機(jī)能夠自動(dòng)出題, 并要求用戶計(jì)算,同時(shí) 計(jì)算機(jī)判斷用戶計(jì)算的對錯(cuò)并打分, 要求十題為一個(gè)單元, 每題一個(gè)運(yùn)算符, 運(yùn)算符包括,三種,參與加減運(yùn)算實(shí)部虛部為一位數(shù)。(5)重載輸入輸出運(yùn)算符, 對復(fù)數(shù)的輸入既可采用實(shí)部虛部分開提示輸入, 也可直接輸入諸如a+ib或a+ib這種形式, 對復(fù)數(shù)的輸出要考慮實(shí)部虛部的正負(fù)號,通過判斷給出的輸出結(jié)果。C課程設(shè)計(jì)復(fù)數(shù)計(jì)算器NC課程設(shè)計(jì)復(fù)數(shù)計(jì)算器結(jié)束乂2. 程序設(shè)計(jì)思想1 )類的封裝程序中將復(fù)數(shù)形式的數(shù)據(jù)定義成一個(gè)復(fù)數(shù)類CComplex,重載了加法與減法等運(yùn)算符,使函數(shù)的加減等運(yùn)算像一般數(shù)據(jù)一樣方便每個(gè)運(yùn)算符重載都用一個(gè)函數(shù)去實(shí)現(xiàn)。參考類的定義如下:c
3、lass CComplexprivate:double Real,lmage;public:CComplex(double real=O,double image=0)/ 構(gòu)造函數(shù)Real二real;lmage二image;friend istream&operator»(istream&is,CComplex&com);/ 重載輸入friend ostrea m&operator«(ostrea m&os,CComplex&com);/重載輸出CComplex operator+(CComplex&com);CCom
4、plex operator-(CComplex&com);/ 減法重載CComplex operator*(CComplex&com);/乘法重載CComplex operator/(CComplex&com);/ 除法重載int operator=(CComplex&com);int operator!=(CComplex&com);C 課程設(shè)計(jì)復(fù)數(shù)計(jì)算器int operator>(CComplex&com);int operator<(CComplex&com);float Module(void);/ 復(fù)數(shù)求模;(2)
5、設(shè)計(jì)的任務(wù)要求 1在實(shí)際應(yīng)用中,輸入復(fù)數(shù)可能為 a+bi, a, bi, -a, -bi, +i.-.1等形式。重載輸入運(yùn)算符應(yīng)該能識別這樣形式多樣的復(fù)數(shù)。所以在重載輸入函數(shù)時(shí)要綜合考慮 上述各種輸入形式??尚械奶幚矸绞绞牵涸谥剌d輸入函數(shù)中,設(shè)計(jì)用(3) 設(shè)計(jì)的任務(wù)要求 2在程序中設(shè)計(jì)一個(gè)復(fù)數(shù)運(yùn)算的測試函數(shù) Test (),其功能是讓計(jì)算機(jī)隨機(jī) 出 10 道運(yùn)算題,用戶給出答案,同時(shí)計(jì)算機(jī)實(shí)時(shí)判斷對錯(cuò)并可以打分。 這個(gè)函數(shù)的關(guān)鍵是讓計(jì)算機(jī)隨機(jī)產(chǎn)生復(fù)數(shù)對象和運(yùn)算符,計(jì)算機(jī)內(nèi)部有一 個(gè)隨機(jī)數(shù)發(fā)生器,可以產(chǎn)生一個(gè)固定順序的整型隨機(jī)數(shù)序列,調(diào)用語句為 “int a = rand ();”這時(shí), a 就
6、是該隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)。由于產(chǎn)生的隨機(jī)書數(shù)在整數(shù)范圍內(nèi),為測試方便,按程序設(shè)計(jì)要求, 產(chǎn)生的隨機(jī)復(fù)數(shù)對象實(shí)部和虛部在 100 以內(nèi),運(yùn)算符只有加減兩種。 因此, 需要對產(chǎn)生的隨機(jī)數(shù)進(jìn)行進(jìn)一步的處理,用隨機(jī)數(shù)模除以除以 100 ,產(chǎn)生 出 100 以內(nèi)的隨機(jī)整數(shù);同樣,用隨機(jī)數(shù)模除以 3,可以產(chǎn)生出 0、 1、 3 三個(gè)隨機(jī)數(shù)據(jù),定義 0 為加法, 1 為減法, 2 為乘法,這樣就可以產(chǎn)生 出隨機(jī)的復(fù)數(shù)對象的加減乘運(yùn)算了。 可以參見圖 2 測試子程序 Test ()結(jié)構(gòu)框圖C 課程設(shè)計(jì)復(fù)數(shù)計(jì)算器結(jié)束(4 )設(shè)計(jì)的任務(wù)要求3在程序中重載了 >>運(yùn)算符,其功能是讓用戶能夠直接輸入a
7、+bi , a+b*i兩種形式的復(fù)數(shù),其結(jié)構(gòu)框圖如圖3所示。結(jié)束當(dāng)前字符是否是_,Sign=1 , k+輸出錯(cuò)誤信 息,函數(shù)返回NY3 r.將字符轉(zhuǎn)變?yōu)閿?shù)值3.程序界面幵始界面是S-A-運(yùn)運(yùn)迄-邏舁 抑減歸徐計(jì): 量連連連數(shù)較 求數(shù)數(shù)數(shù)數(shù)<比 數(shù)復(fù)復(fù)復(fù)復(fù)入數(shù)岀擇 復(fù)多多多壷逼詵 «!= - = !> 主冃 12 3 4 5 6 7 8 節(jié)運(yùn)行結(jié)果界面i: "D:k4VDebug3.exe*試 it 運(yùn)運(yùn)運(yùn)運(yùn)M 加威乘客: 暗八連醫(yī)黑連數(shù)較 卡歎歎歎數(shù)i 數(shù)復(fù)復(fù)復(fù)復(fù)人數(shù)一 復(fù)多多多多逬復(fù)吟吳H 1121 凌任惹犍罐續(xù)4 .程序源代碼與詳細(xì)注解:# in clude
8、<iostream.h># in clude<math.h># in clude<stdlib.h># in cludevstri ng.h>#defi ne Z 1e-6class CComplexprivate:double Real,lmage;public:CComplex(double real=0,double image=0)/ 構(gòu)造函數(shù)Real=real;Image=image;friend istream&operator>>(istream&is,CComplex&com); / 重載輸入frie
9、nd ostream&operator<<(ostream&os,CComplex&com);/ 重載輸出CComplex operator+(CComplex&com);CComplex operator-(CComplex&com);/ 減法重載CComplex operator*(CComplex&com);/ 乘法重載CComplex operator/(CComplex&com);/ 除法重載int operator=(CComplex&com);int operator!=(CComplex&com
10、);int operator>(CComplex&com);int operator<(CComplex&com);float Module(void); / 復(fù)數(shù)求模;CComplex CComplex:operator +(CComplex&com)/ 加法重載CComplex t;/ 定義類對象t.Real=Real+com.Real;/ 實(shí)部相加t.Image=Image+com.Image; / 虛部相加return t;CComplex CComplex:operator -(CComplex&com) / 減法重載 CComplex t
11、; / 定義類對象 t.Real=Real-com.Real; / 實(shí)部相減 t.Image=Image-com.Image; / 虛部相減 return t;/ 除法重載t;CComplex CComplex:operator*(CComplex&com) / 乘法重載CComplex t;/ 定義類對象t.Real=Real*com.Real-com.Image*Image;/ 乘法實(shí)部t.Image=Real*com.Image+Image*com.Real;/ 乘法虛部return t;CComplex CComplex:operator/(CComplex &com)
12、CComplex/ 定義類對象除法實(shí)部除法虛部return t;/*int CComplex: operator!=(CComplex&com)符,分別判斷復(fù)數(shù)的實(shí)部與虛部if(*this=com)return 0;elsereturn 1;*/ 重載“! = ”運(yùn)算int CComplex: operator>(CComplex&com)/ 重載“ > ”運(yùn)算符,比較復(fù)數(shù)的模if(Module()>com.Module()return 1;/ 大于,則返回 1elsereturn 0;int CComplex: operator<(CComplex&a
13、mp;com)/ 重載“< ”運(yùn)算符,比較復(fù)數(shù)的模if(Module()<com.Module()return 1; / 小于,則返回 1 elsereturn 0;float CComplex:Module()float t;t=sqrt(Real*Real+Image*Image);return t;/ cin.get();/ cin.get();int CComplex:operator=(CComplex&com)/ 重載“ = ”運(yùn)算符,分別判斷兩個(gè)復(fù)數(shù)對象的實(shí)部與虛部if(Real=com.Real&&Image=com.Image)return
14、 1; / 實(shí)部與虛部分別相等返回 1else return 0;void Add()CComplex a1,a2,sum,f(0,0);cout<<" 加法計(jì)算 "<<endl<<" 最少輸入兩個(gè)復(fù)數(shù), 并以零結(jié)束 "<<endl;cout<<" 第一個(gè)復(fù)數(shù) "<<endl;cin>>a1;cout<<" 第二個(gè)復(fù)數(shù) "<<endl;cin>>a2;sum=a1+a2;cout<<&
15、quot; 第三個(gè)復(fù)數(shù) "<<endl;cin>>a1;int i=4;while(!(a1=f)sum=sum+a1;cout<<" 第 "<<i<<" 個(gè)復(fù)數(shù) "<<endl;cin>>a1;i+;cout<<" 結(jié)果 "<<sum<<endl;cout<<" 按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Sub()C
16、Complex a1,a2,sub,f(0,0);cout<<" 減法計(jì)算 "<<endl<<" 最少輸入兩個(gè)復(fù)數(shù), 并以零結(jié)束 "<<endl;cout<<" 第一個(gè)復(fù)數(shù) "<<endl;cin>>a1;cout<<" 第二個(gè)復(fù)數(shù) "<<endl;cin>>a2;sub=a1-a2;cout<<" 第三個(gè)復(fù)數(shù) "<<endl;cin>>a1
17、;int i=4;while(!(a1=f)sub=sub-a1;cout<<" 第 "<<i<<" 個(gè)復(fù)數(shù) "<<endl;cin>>a1;i+;cout<<" 結(jié)果: "<<sub<<endl;cout<<" 按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Mul()CComplex a1,a2,mul,f(0,0);cout<<"
18、 乘法計(jì)算 "<<endl<<" 最少輸入兩個(gè)復(fù)數(shù), 并以零結(jié)束 "<<endl;cout<<" 第一個(gè)復(fù)數(shù) "<<endl;cin>>a1;cout<<" 第二個(gè)復(fù)數(shù) "<<endl;cin>>a2;mul=a1*a2;cout<<" 第三個(gè)復(fù)數(shù) "<<endl;cin>>a1;int i=4;while(!(a1=f)mul=mul*a1;cout<&l
19、t;" 第 "<<i<<" 個(gè)復(fù)數(shù) "<<endl;cin>>a1;i+;cout<<" 結(jié)果: "<<mul<<endl;cout<<" 按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Div()CComplex a1,a2,div,f(0,0);cout<<" 除法計(jì)算 "<<endl<<" 最少輸入
20、兩個(gè)復(fù)數(shù), 并以零結(jié)束 "<<endl;cout<<" 第一個(gè)復(fù)數(shù) "<<endl;cin>>a1;cout<<" 第二個(gè)復(fù)數(shù) "<<endl;cin>>a2;div=a1/a2;cout<<" 第三個(gè)復(fù)數(shù) "<<endl;cin>>a1;int i=4;while(!(a1=f)div=div/a1;cout<<" 第 "<<i<<" 個(gè)復(fù)
21、數(shù) "<<endl;cin>>a1;i+;cout<<" 結(jié)果: "<<div<<endl;cout<<" 按任意鍵繼續(xù) "<<endl;/cout.flush();cin.get();void Compare(void)復(fù)數(shù)模比較cout<<""<<endl;CComplex a1,a2;cout<<" 輸入兩個(gè)復(fù)數(shù) :"<<endl;cout<<"
22、第一個(gè)復(fù)數(shù): "cin>>a1;cout<<" 第二個(gè)復(fù)數(shù) "cin>>a2;if(a1=a2)cout<<" 這兩個(gè)復(fù)數(shù)相等 "<<endl;else if(a1>a2)cout<<a1<<" 的模大于 "<<a2<<" 的模 "<<endl;else if(a1<a2)cout<<a1<<" 的模小于 "<<a2&l
23、t;<" 的模 "<<endl; cout<<" 按任意鍵繼續(xù) "<<endl;cin.get();istream& operator>>(istream&is,CComplex&com) / 重 載輸入,可以輸入 a+bi, 也可以輸入 a+b*ichar s100;is>>s; / 字符串 s 用于接收復(fù)數(shù)int len=strlen(s);int n=0,sign=1; /n 為當(dāng)前從字符串中提取出來的數(shù)字, 初始化為0; sign 為 n 的符號,初始化為正
24、com.Image=com.Real=0;if(len=4)for(int k=0;k<len;k+) / 判斷字符串是否 合法if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i')cout<<"Error"<<endl;/ 若字符串不是 19 的數(shù)字或“+ ”、“-”、“= ”則錯(cuò)誤,輸出 Errorreturn is;for(k=0;k<len;) / 依次識
25、別字符串中和字符if(n!=0&&(sk='-'|sk='+') / 判斷是否為符號位com.Real=sign*n; / 是符號,且 n!=0,n 已被賦值,當(dāng)前 讀取的是虛部的符號n=0; / 將 sign*n 的值賦給實(shí)部,然后 n 清零,準(zhǔn)備接受虛 部的值if(sk='-')sign=-1;k+; / 給符號標(biāo)志賦值if(sk='+')sign=1;k+; / 給符號標(biāo)志賦值if(sk='i') / 若當(dāng)前字符為 iif(k!=len-1) / 判斷 i 是否為最后一個(gè)字符 cout<
26、<"errorn" / 若不是,則復(fù)數(shù)輸入格式錯(cuò)誤 else com.Image=sign*n;/ 是最后一個(gè)字符,復(fù)數(shù)對象已接收完畢,用sign*n 給虛部賦值break;while(sk>='0'&&sk<='9') / 當(dāng)字符在 09 之間是,將數(shù) 字字符轉(zhuǎn)化為數(shù)字?jǐn)?shù)值n=n*10+sk-'0'k+;if(slen-1!='i'&&n!=0)/如果最后一個(gè)字符不是i,表示復(fù)數(shù)只有實(shí)部,沒有虛部com.Real=n*sign;return is;elsefo
27、r(int k=0;k<len;k+) / 依次識別字符串中和字符if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i'&&sk!='*')/ 若字符串不是 19 的數(shù)字或“ + ”、“- ”、“= ”、“*”則錯(cuò)誤, 輸出 Errorcout<<"Error"<<endl;return is;for(k=0;k<len;) / 依次
28、識別字符串中和字符if(n!=0&&(sk='-'|sk='+') / 判斷是否為符號位com.Real=sign*n;n=0;if(sk='-')sign=-1;k+; / 給符號標(biāo)志賦值if(sk='+')sign=1;k+; / 給符號標(biāo)志賦值if(sk='*') / 若當(dāng)前字符為 *k+;com.Image=sign*n;if(sk='i') / 若當(dāng)前字符為 iif(k!=len-1) / 判斷 i 是否為最后一個(gè)字符 cout<<"errorn&qu
29、ot; / 若不是,則復(fù)數(shù)輸入格式錯(cuò)誤/else/com.Image=sign*n;break;while(sk>='0'&&sk<='9')字字符轉(zhuǎn)化為數(shù)字?jǐn)?shù)值/ 當(dāng)字符在 09 之間是, 將數(shù)n=n*10+sk-'0'k+;if(slen-1!='i'&&n!=0)/如果最后一個(gè)字符不是 i,表示復(fù)數(shù)只有實(shí)部,沒有虛部com.Real=n*sign;return is; ostream&operator<<(ostream&os,CComplex&
30、com)/ 重載輸出if(fabs(com.Image)<Z)/ 如果虛部為零os<<com.Real;/ 只輸出實(shí)部;else if(fabs(com.Real)<Z)/ 如果實(shí)部為零os<<com.Image<<"i"/ 只輸出虛部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i" / 虛部為正,用 “ + ”連接實(shí)部與虛部elseos<<com.Real<
31、<com.Image<<"i" / 虛部為負(fù),虛部的符號 連接實(shí)部與虛部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)生隨機(jī)的兩位數(shù), 可正可 負(fù)image1=rand()%200-100;real2=rand()%200-100;image2=rand()%20
32、0-100;CComplex f1(real1,image1),f2(real2,image2);/ 用隨機(jī)產(chǎn)生的兩位數(shù)初始化類對象real3=rand()%20-10;/ 產(chǎn)生隨機(jī)的一位數(shù)image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4);/ 用隨機(jī)產(chǎn)生的一位數(shù)初始化類對象 op=rand()%3; / 隨即產(chǎn)生 3 種運(yùn)算符 cout<<" 第 "<<i<<" 題:"
33、;switch(op)case 0:answer=f1+f2;coutvvflvv" 加上"vvf2vv" 等于"break;case 1:answer=f1-f2;coutvvflvv" 減去"vvf2vv" 等于"break;case 2:/ 乘法用實(shí)部、虛部都是一位的對象answer=f1*f2;coutvvflvv" 乘以"vvf2vv" 等于"break;cin>>f5;if(answer=f5) / 判斷結(jié)果是否正確cout<<"
34、 此題做對了 "<<'n'cout<<" 加十分: "<<'n'score+=10; / 正確,加十分elsecout<<" 此題做錯(cuò)了 "<<'n'cout<<" 不得分: "<<'n' / 錯(cuò)誤,不得分cout<<" 你的最后得分為: "<<score<<endl;void main(void) / 輸出程序主菜單,并接收用戶選擇char input;CComplex a,b,c,d,e,f,g;system("cls");cout<<"t 這是一個(gè)復(fù)數(shù)計(jì)算器程序,擁有以下功能,請按照菜單選擇進(jìn)入功能。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廢液回收與環(huán)保處理服務(wù)合同樣板3篇
- 2025年度旅游產(chǎn)業(yè)全新合同簽訂及智慧旅游平臺合作3篇
- 農(nóng)村公路養(yǎng)護(hù)管理合同(含應(yīng)急維修服務(wù))
- 2024年中國物流組合生產(chǎn)線市場調(diào)查研究報(bào)告
- 2024年沈陽市鐵西精神病醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 2025年度雙向轉(zhuǎn)診醫(yī)療資源優(yōu)化配置合作協(xié)議3篇
- 2025年度涉房地產(chǎn)糾紛訴訟財(cái)產(chǎn)保全擔(dān)保合同書3篇
- 2024年塑料粉末加料機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年度消防設(shè)備維修保養(yǎng)與應(yīng)急處理服務(wù)合同3篇
- 2024年中國接待桌市場調(diào)查研究報(bào)告
- 采購合同范例壁布
- 公司員工出差車輛免責(zé)協(xié)議書
- 2024年陜西榆林市神木市公共服務(wù)輔助人員招聘775人歷年管理單位遴選500模擬題附帶答案詳解
- 安全生產(chǎn)事故案例分析
- 期末檢測卷(一)(試卷)-2024-2025學(xué)年外研版(三起)英語六年級上冊(含答案含聽力原文無音頻)
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識宣傳課件
- 2023-2024學(xué)年北京市通州區(qū)九年級(上)期末語文試卷
- 2023-2024學(xué)年廣東省深圳市龍崗區(qū)八年級(上)期末英語試卷
- DB23-T 3768-2024北方種鵝節(jié)水生態(tài)旱養(yǎng)管理技術(shù)規(guī)程
- 勘察工作質(zhì)量及保證措施
- 七、分蛋糕博弈
評論
0/150
提交評論