C++課程設(shè)計(jì)復(fù)數(shù)計(jì)算器_第1頁
C++課程設(shè)計(jì)復(fù)數(shù)計(jì)算器_第2頁
C++課程設(shè)計(jì)復(fù)數(shù)計(jì)算器_第3頁
C++課程設(shè)計(jì)復(fù)數(shù)計(jì)算器_第4頁
C++課程設(shè)計(jì)復(fù)數(shù)計(jì)算器_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C+課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告姓名 學(xué)號(hào) 班級(jí) 合作者 學(xué)號(hào) 班級(jí) 任課教師 時(shí)間 教師指定題目 復(fù)數(shù)計(jì)算器 評(píng)定難易級(jí)別 A級(jí) 實(shí)驗(yàn)報(bào)告成績(jī) 復(fù)數(shù)計(jì)算器程序功能設(shè)計(jì)1 程序功能的總體結(jié)構(gòu)復(fù)數(shù)計(jì)算器的程序總體功能可設(shè)計(jì)成如圖所示,可以看出,復(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) 編寫可以對(duì)輸入的復(fù)數(shù)求模的成員函數(shù)。(4) 編寫具有測(cè)試功能的函數(shù),即計(jì)算機(jī)能夠自動(dòng)出題,并要求用戶計(jì)算

2、,同時(shí)計(jì)算機(jī)判斷用戶計(jì)算的對(duì)錯(cuò)并打分,要求十題為一個(gè)單元,每題一個(gè)運(yùn)算符,運(yùn)算符包括,三種,參與加減運(yùn)算實(shí)部虛部為一位數(shù)。(5) 重載輸入輸出運(yùn)算符,對(duì)復(fù)數(shù)的輸入既可采用實(shí)部虛部分開提示輸入,也可直接輸入諸如或這種形式,對(duì)復(fù)數(shù)的輸出要考慮實(shí)部虛部的正負(fù)號(hào),通過判斷給出的輸出結(jié)果。開始輸出菜單及提示信息輸入選擇是否做加法 N是否做減法 N Y是否進(jìn)行測(cè)試 N加法子程序Add() Y . . . . . . 減法子程序 Y測(cè)試子程序是否退出 N Y結(jié)束 2 程序設(shè)計(jì)思想1)類的封裝程序中將復(fù)數(shù)形式的數(shù)據(jù)定義成一個(gè)復(fù)數(shù)類CComplex,重載了加法及減法等運(yùn)算符,使函數(shù)的加減等運(yùn)算像一般數(shù)據(jù)一樣方便

3、.每個(gè)運(yùn)算符重載都用一個(gè)函數(shù)去實(shí)現(xiàn)。參考類的定義如下:class CComplexprivate:double Real,Image;public:CComplex(double real=0,double image=0) /構(gòu)造函數(shù)Real=real;Image=image;friend istream&operator>>(istream&is,CComplex&com); /重載輸入friend ostream&operator<<(ostream&os,CComplex&com); /重載輸出CComplex o

4、perator+(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); floa

5、t Module(void); /復(fù)數(shù)求模;(2)設(shè)計(jì)的任務(wù)要求1在實(shí)際應(yīng)用中,輸入復(fù)數(shù)可能為a+bi, a, bi, -a, -bi, +i. i. I等形式。重載輸入運(yùn)算符應(yīng)該能識(shí)別這樣形式多樣的復(fù)數(shù)。所以在重載輸入函數(shù)時(shí)要綜合考慮上述各種輸入形式??尚械奶幚矸绞绞牵涸谥剌d輸入函數(shù)中,設(shè)計(jì)用(3)設(shè)計(jì)的任務(wù)要求2在程序中設(shè)計(jì)一個(gè)復(fù)數(shù)運(yùn)算的測(cè)試函數(shù)Test(),其功能是讓計(jì)算機(jī)隨機(jī)出10道運(yùn)算題,用戶給出答案,同時(shí)計(jì)算機(jī)實(shí)時(shí)判斷對(duì)錯(cuò)并可以打分。這個(gè)函數(shù)的關(guān)鍵是讓計(jì)算機(jī)隨機(jī)產(chǎn)生復(fù)數(shù)對(duì)象和運(yùn)算符,計(jì)算機(jī)內(nèi)部有一個(gè)隨機(jī)數(shù)發(fā)生器,可以產(chǎn)生一個(gè)固定順序的整型隨機(jī)數(shù)序列,調(diào)用語句為“int a = ra

6、nd();”這時(shí),a就是該隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)。由于產(chǎn)生的隨機(jī)書數(shù)在整數(shù)范圍內(nèi),為測(cè)試方便,按程序設(shè)計(jì)要求,產(chǎn)生的隨機(jī)復(fù)數(shù)對(duì)象實(shí)部和虛部在100以內(nèi),運(yùn)算符只有加減兩種。因此,需要對(duì)產(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ù)對(duì)象的加減乘運(yùn)算了??梢詤⒁妶D2測(cè)試子程序Test()結(jié)構(gòu)框圖。設(shè)置循環(huán)次數(shù)為10用兩個(gè)隨機(jī)數(shù)初始復(fù)數(shù)對(duì)象3產(chǎn)生8個(gè)100以內(nèi)的隨機(jī)數(shù)隨機(jī)數(shù)最后兩個(gè)隨機(jī)數(shù)初始復(fù)數(shù)對(duì)象4前兩個(gè)隨機(jī)數(shù)初始復(fù)數(shù)對(duì)象1用戶輸入結(jié)果兩對(duì)

7、象相乘后兩個(gè)隨機(jī)數(shù)初始復(fù)數(shù)對(duì)象2結(jié)果是否正確產(chǎn)生2以內(nèi)的隨機(jī)數(shù)op N Y總分加10Op為0兩對(duì)象相減兩對(duì)象相加用戶輸入結(jié)果用戶輸入結(jié)果結(jié)果是否正確結(jié)果是否正確 N N輸出出錯(cuò)信息輸出出錯(cuò)信息輸出出錯(cuò)信息 Y Y總分加10總分加10 輸出總分結(jié)束(4)設(shè)計(jì)的任務(wù)要求3在程序中重載了>>運(yùn)算符,其功能是讓用戶能夠直接輸入a+bi,a+b*i兩種形式的復(fù)數(shù),其結(jié)構(gòu)框圖如圖3所示。 以字符串的形式接受復(fù)數(shù)對(duì)象求字符串長(zhǎng)度初試化當(dāng)前數(shù)值n=0,字符變量 sign=1字符串是否存在非法字符 Y輸出錯(cuò)誤信息,函數(shù)返回是否判別完字符串中所有字符 N Y最后一個(gè)字符不是i且n!=0當(dāng)前字符為+、號(hào)

8、,同時(shí)n!=0 N復(fù)數(shù)對(duì)象只有實(shí)部,前面取出的數(shù)值賦給實(shí)部 N前面取出的數(shù)值賦給實(shí)部,n=0 N結(jié)束當(dāng)前字符是否是+ NSign=1,k+當(dāng)前字符是否是 NSign=1,k+當(dāng)前字符是否是為i i是否是最后一個(gè)字符 N YYN輸出錯(cuò)誤信息,函數(shù)返回 當(dāng)前字符是否是數(shù)字字符NN將字符轉(zhuǎn)變?yōu)閿?shù)值NY3 程序界面開始界面運(yùn)行結(jié)果界面4程序源代碼及詳細(xì)注解:# include<iostream.h># include<math.h># include<stdlib.h># include<string.h>#define Z 1e-6class CCom

9、plexprivate:double Real,Image;public:CComplex(double real=0,double image=0) /構(gòu)造函數(shù)Real=real;Image=image;friend istream&operator>>(istream&is,CComplex&com); /重載輸入friend ostream&operator<<(ostream&os,CComplex&com); /重載輸出CComplex operator+(CComplex&com); CComplex

10、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); float Module(void); /復(fù)數(shù)求模;CComplex CCompl

11、ex:operator +(CComplex&com) /加法重載CComplex t; /定義類對(duì)象t.Real=Real+com.Real; /實(shí)部相加t.Image=Image+com.Image; /虛部相加return t;CComplex CComplex:operator -(CComplex&com) /減法重載CComplex t; /定義類對(duì)象t.Real=Real-com.Real; /實(shí)部相減t.Image=Image-com.Image; /虛部相減return t;CComplex CComplex:operator*(CComplex&co

12、m) /乘法重載CComplex t; /定義類對(duì)象t.Real=Real*com.Real-com.Image*Image; /乘法實(shí)部t.Image=Real*com.Image+Image*com.Real; /乘法虛部return t;CComplex CComplex:operator/(CComplex &com) /除法重載CComplex t; /定義類對(duì)象t.Real=(Real*com.Real+Image*com.Image)/(com.Real*com.Real+com.Image*com.Image);/除法實(shí)部t.Image=(Image*com.Real-

13、Real*com.Image)/(com.Real*com.Real+com.Image*com.Image);/除法虛部return t;/*int CComplex: operator!=(CComplex&com) /重載“!=”運(yùn)算符,分別判斷復(fù)數(shù)的實(shí)部與虛部if(*this=com)return 0;else return 1;*/int CComplex: operator>(CComplex&com) /重載“>”運(yùn)算符,比較復(fù)數(shù)的模if(Module()>com.Module()return 1; /大于,則返回1else return 0;i

14、nt CComplex: operator<(CComplex&com) /重載“<”運(yùn)算符,比較復(fù)數(shù)的模if(Module()<com.Module()return 1; /小于,則返回1else return 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ù)對(duì)象的實(shí)部與虛部if(Real=com.Real&am

15、p;&Image=com.Image)return 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=a

16、1+a2;cout<<"第三個(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();

17、void Sub()CComplex 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

18、;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<<"乘法計(jì)算&

19、quot;<<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<<"第"

20、;<<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<<"最少輸入兩個(gè)復(fù)數(shù),并以零結(jié)束"<<

21、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ù)數(shù)"<<endl; cin>>a

22、1;i+;cout<<"結(jié)果:"<<div<<endl;cout<<"按任意鍵繼續(xù)"<<endl;/cout.flush();cin.get();void Compare(void)cout<<" 復(fù)數(shù)模比較 "<<endl; CComplex a1,a2;cout<<"輸入兩個(gè)復(fù)數(shù):"<<endl;cout<<"第一個(gè)復(fù)數(shù):"cin>>a1;cout<<

23、;"第二個(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<<"的模"<<endl; cout<<&q

24、uot;按任意鍵繼續(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的符號(hào),初始化為正com.Image=com.Real=0; if(len=4)for(int k=0;k<len;k+) /判斷字符串是否合法

25、if(sk<'0'|sk>'9')&&(sk!='+'&&sk!='-'&&sk!='i')cout<<"Error"<<endl; /若字符串不是19的數(shù)字或“+”、“-”、“=”則錯(cuò)誤,輸出Errorreturn is;for(k=0;k<len;) /依次識(shí)別字符串中和字符if(n!=0&&(sk='-'|sk='+') /判斷是否為符號(hào)位com.Rea

26、l=sign*n; /是符號(hào),且n!=0,n已被賦值,當(dāng)前讀取的是虛部的符號(hào) n=0; /將sign*n的值賦給實(shí)部,然后n清零,準(zhǔn)備接受虛部的值 if(sk='-')sign=-1;k+; /給符號(hào)標(biāo)志賦值 if(sk='+')sign=1;k+; /給符號(hào)標(biāo)志賦值 if(sk='i') /若當(dāng)前字符為i if(k!=len-1) /判斷i是否為最后一個(gè)字符cout<<"errorn" /若不是,則復(fù)數(shù)輸入格式錯(cuò)誤elsecom.Image=sign*n;/是最后一個(gè)字符,復(fù)數(shù)對(duì)象已接收完畢,用sign*n給虛部

27、賦值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;elsefor(int k=0;k<len;k+) /依次識(shí)別字符串中和字符if(sk<'0'|sk>'9')&&(sk!='

28、+'&&sk!='-'&&sk!='i'&&sk!='*') /若字符串不是19的數(shù)字或“+”、“-”、“=”、“*”則錯(cuò)誤,輸出Errorcout<<"Error"<<endl;return is;for(k=0;k<len;) /依次識(shí)別字符串中和字符if(n!=0&&(sk='-'|sk='+') /判斷是否為符號(hào)位com.Real=sign*n;n=0; if(sk='-'

29、;)sign=-1;k+; /給符號(hào)標(biāo)志賦值 if(sk='+')sign=1;k+; /給符號(hào)標(biāo)志賦值 if(sk='*') /若當(dāng)前字符為*k+;com.Image=sign*n; if(sk='i') /若當(dāng)前字符為i if(k!=len-1) /判斷i是否為最后一個(gè)字符cout<<"errorn" /若不是,則復(fù)數(shù)輸入格式錯(cuò)誤/else/com.Image=sign*n;break; while(sk>='0'&&sk<='9') /當(dāng)字符在09之

30、間是,將數(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;ostream&operator<<(ostream&os,CComplex&com) /重載輸出if(fabs(com.Image)<Z) /如果虛部為零 os<<com.Real; /只輸出實(shí)部; else if(fabs(com.Real)<Z) /如果實(shí)部為零 os<

31、<com.Image<<"i" /只輸出虛部else if(com.Image>0) os<<com.Real<<"+"<<com.Image<<"i" /虛部為正,用“+”連接實(shí)部與虛部else os<<com.Real<<com.Image<<"i" /虛部為負(fù),虛部的符號(hào)連接實(shí)部與虛部 return os;void Test(void)double real1,real2,real3,real4,ima

32、ge1,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()%200-100;CComplex f1(real1,image1),f2(real2,image2); /用隨機(jī)產(chǎn)生的兩位數(shù)初始化類對(duì)象real3=rand()%20-10; /產(chǎn)生隨機(jī)的一位數(shù)image3=rand()%20-10

33、; real4=rand()%20-10;image4=rand()%20-10;CComplex f3(real3,image3),f4(real4,image4); /用隨機(jī)產(chǎn)生的一位數(shù)初始化類對(duì)象op=rand()%3; /隨即產(chǎn)生3種運(yùn)算符cout<<"第"<<i<<"題:"switch(op)case 0:answer=f1+f2;cout<<f1<<"加上"<<f2<<"等于"break; case 1:answer=f

34、1-f2;cout<<f1<<"減去"<<f2<<"等于"break;case 2: /乘法用實(shí)部、虛部都是一位的對(duì)象 answer=f1*f2;cout<<f1<<"乘以"<<f2<<"等于"break;cin>>f5;if(answer=f5) /判斷結(jié)果是否正確cout<<"此題做對(duì)了"<<'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&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論