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

下載本文檔

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

文檔簡介

1、如有你有幫助,請購買下載,謝謝!#include#include #include #include #include #include#define EPS 1e-5 /定義精度常數(shù) using namespace std; /使用標(biāo)準(zhǔn)空間命名 std namespace NameCComplex /定義命名空間 NameCComplex class CComplex / 定義一個 CComplex 類 private: double Real,Image;public:CComplex(double real=0,double image=0) / 構(gòu)造函數(shù) Real=real;Image

2、=image;friend istream & operator(istream &is,CComplex &com); / 重載輸入 friend ostream & operator(CComplex &com); int operator(CComplex &com) / 重載運(yùn)算符 ,比較模的大小 if(mod()com.mod()return 1;elsereturn 0;int CComplex:operator(CComplex &com)if(mod()(istream &is,CComplex &com) / 重載輸入,可以輸入 a+bi 的形式 couts; / 用字符串的

3、形式接受復(fù)數(shù)int len=strlen(s); / 求出字符串的長度int n=0,sign=1;/n 為當(dāng)前從字符串中提取出來的數(shù)字,初始化為0;sign 是難道符號,初始化為正com.Image=com.Real=0;for(int k=0;klen;k+) / 判斷接受的字符串是否合法 if(sk 9) & (sk!=+ & sk!=- & sk!=i)couterrorendl;return is; / 錯誤,輸出出錯信息并返回 for(k=0;klen;) / 順序識別字符串中各字符if(n!=0 &(sk=-|sk=+) / 當(dāng)前字符是否是符號位 com.Real=sign*n;

4、/是符號位,且 n!=0 ,即 n 已被賦值,表明當(dāng)前讀取的是虛部的符號 n=0; /將原 n*sign 值賦給實(shí)部,將 n 清零,準(zhǔn)備接受虛部的值 if(sk=-) / 當(dāng)前字符為負(fù)號sign=-1;k+; / 給符號標(biāo)志賦值if(sk=+) / 當(dāng)前字符為正號sign=1;k+; / 給符號標(biāo)志賦值if(sk=i) / 當(dāng)前字符為 Iif(k!=len-1)/判斷字符T是否為字符串中作后一個字符cout=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) /如果最后一個字符不是 I ,表示復(fù)數(shù)對象內(nèi)只

5、有實(shí)部,沒有虛部 com.Real=n*sign;return is;ostream & operator(ostream &os,CComplex &com) / 重載輸入 if(fabs(com.Image)EPS) / 如果虛部為 0 oscom.Real; / 只輸出實(shí)部 else if(fabs(com.Real)EPS) / 如果實(shí)部為 0 oscom.Image0) oscom.Real+com.Imagei; elseoscom.Realcom.Imagei; / 虛部為正 return os;CComplex CComplex:operator+(CComplex &com)

6、 / 加法重載 CComplex sum; sum.Real=Real+com.Real; / 實(shí)部相加 sum.Image=Image+com.Image; / 虛部相加 return sum;CComplex CComplex:operator*(CComplex &com) / 乘法重載 CComplex multi; multi.Real=Real*com.Real-Image*com.Image; / 乘積實(shí)部 multi.Image=Real*com.Image+Image*com. Real; / 乘積虛部 return multi;CComplex CComplex:opera

7、tor-(CComplex &com) / 減法重載 CComplex sub;sub.Real=Real-com.Real;sub.Image=Image-com.Image; return sub;CComplex CComplex:operator+=(CComplex &com) / 重載加法賦值 Real=Real+com.Real;Image=Image+com.Image;return *this;CComplex CComplex:operator-=(CComplex &com) / 重載減法賦值 Real=Real-com.Real;Image=Image-com.Imag

8、e;return *this;CComplex CComplex:operator*=(CComplex &com) / 重載乘法賦值 double nReal=Real*com.Real-Image*com.Image;double nImage=Real*com.Image+Image*com.Real;Real=nReal;Image=nImage;return *this;int CComplex:operator=(CComplex &com) / 重載等于if(Real=com.Real & Image=com.Image)return 1;elsereturn 0;void Te

9、st(void) / 測試函數(shù)user.nTest+;cout共10道題,做100以內(nèi)的加減運(yùn)算,滿分100分:n;double real1,real2,image1,image2,real3,real4,image3,image4;CComplex answer,temp;int score=0;char op;for(int i=0;i=9;i+)/為復(fù)數(shù)產(chǎn)生隨機(jī)值 real1=rand()%200-100;image1=rand()%200-100; real2=rand()%200-100;image2=rand()%200-100;CComplex a(real1,image1),b

10、(real2,image2); real3=rand()%20-10;image3=rand()%20-10;real4=rand()%20-10;image4=rand()%20-10;CComplex c(real3,image3),d(real4,image4); op=rand()%3; / 產(chǎn)生隨機(jī)加減乘法運(yùn)算的三個值 switch(op)case 0:answer=a+b;couta加上b等于”;break;case 1:answer=a-b;couta減去b等于;break;case 2:answer=c*d;coutc乘以dtemp; / 輸入用戶計(jì)算值if(answer=te

11、mp) / 比較用戶計(jì)算值score+=10;elsecout 此題做錯了 n;cout 正確答案為 :answerendl;cout 你的最后得分是 :scoreendl;if(user.nTest=3)user.alAve=0; user.dlScoreuser.nTest-1=score;for(int i=0;iuser.nTest;i+)user.alAve+=user.dlScorei; user.alAve=user.alAve/user.nTest;elseuser.dlScore0=user.dlScore1;user.dlScore1=user.dlScore2; user

12、.dlScore2=score;for(i=0,user.alAve=0;i3;i+)user.alAve+=user.dlScorei;user.alAve=user.alAve/3;cout 請按任意鍵繼續(xù) n;cout.flush();cin.get();cin.get();void Add() / 復(fù)數(shù)加法運(yùn)算函數(shù)user.nAdd+;CComplex num1,num2,sum,Zero(0,0);cout 加法計(jì)算 n 最少輸入兩個復(fù)數(shù) ,并且以 0 結(jié)束 n; coutnum1;coutnum2; sum=num1+num2; coutnum1;int i=4;while(!(n

13、um1=Zero) sum=sum+num1; cout 第 inum1; i+;cout 加法結(jié)果是 :sumendl;cout 請按任意鍵繼續(xù) n;cout.flush();cin.get();cin.get();void Sub() / 復(fù)數(shù)減法預(yù)算函數(shù)user.nSub+;CComplex num1,num2,sub,Zero(0,0);cout 最少輸入兩個復(fù)數(shù),并且以 0 結(jié)束 n; coutnum1;coutnum2;sub=num1-num2;coutnum1;int i=4;while(!(num1=Zero)sub=sub-num1;cout 第 inum1;i+;cout

14、 減法結(jié)果是 :subendl;cout 請按任意鍵繼續(xù) n;cout.flush();cin.get();cin.get();void Mul() / 復(fù)數(shù)乘積函數(shù)user.nMul+;CComplex num1,num2,mul,Zero(0,0);cout 乘法計(jì)算 n 最少輸入兩個復(fù)數(shù) ,并且以零結(jié)束 n; coutnum1;coutnum2; mul=num1*num2;coutnum1;int i=4;while(!(num1=Zero)mul*=num1;cout 第 inum1;i+;cout 乘法結(jié)果是 :mulendl;coutnum1;+num1; cout 自加的結(jié)果為

15、 num1endl; coutnum1;-num1;cout 自減的結(jié)果為 num1endl; cout 按任意鍵結(jié)束 n;cout.flush(); cin.get(); cin.get();void compare() / 兩復(fù)數(shù)比較函數(shù)CComplex num1,num2; cout 輸入兩個復(fù)數(shù) n; coutnum1;coutnum2;if(num1=num2) coutnum2)coutnum1 的模大于 num2 的模 n; else if(num1num2)coutnum2 的模大于 num1 的模 n; elsecout 這兩個復(fù)數(shù)的模相等 n; cout 按任意鍵繼續(xù) n;

16、cin.get();cin.get();void userprint() / 輸出用戶信息函數(shù)coutuser.szName 使用的次數(shù)為 :user.nTimeendl;cout 其中 :t 加法的次數(shù) :user.nAddt 減法的次數(shù) :user.nSubt 乘法的次 數(shù):user. nMu le ndl;coutt 測試次數(shù) :user.nTestt 平均成績 :user.alAveendl;void Login() / 當(dāng)前用戶信息函數(shù)char szName20;cout 請輸入您的姓名 :; cin.getline(szName,20);ifstream infile;User u

17、ser1;infile.open(user.dat,ios:binary|ios:in);if(!infile)cout 沒有原始記錄文件,您是第一個用戶 !n; strcpy(user.szName,szName);user.nTest+;return;infile.read(char *)&user1,sizeof(User);while(!infile.eof() if(strcmp(user1.szName,szName)=0)user=user1;user.nTime+;cout 歡迎您再次使用復(fù)數(shù)計(jì)算器 !;userprint();cin.get();infile.close();

18、return;infile.read(char *) &user1,sizeof(User);cout 歡迎您再次使用復(fù)數(shù)計(jì)算器 !; strcpy(user.szName,szName);user.nTime+;infile.close();return;void SaveFile() / 用戶資料保存函數(shù)userprint();fstream file;User user1;file.open(user.dat,ios:binary|ios:in|ios:out);if(!file)cout 文件打開錯誤,不能進(jìn)行更新 !n;return;file.seekp(0,ios:beg);whi

19、le(!file.eof()file.read(char *)&user1,sizeof(User);if(strcmp(user1.szName,user.szName)=0)file.seekp(-(sizeof(User),ios:cur);file.write(char *)&user,sizeof(User);file.close();return;file.close();fstream outfile;outfile.open(user.dat,ios:binary|ios:app);outfile.write(char *)&user,sizeof(User);outfile.

20、close();return;using namespace NameCComplex;int main(void) / 主函數(shù)開始srand(time(NULL); / 初始化隨機(jī)數(shù) “種子 ”語句Login(); / 當(dāng)前用戶信息函數(shù)char strChoise20; / 定義字符串名dosystem(cls);coutt 這是一個簡單的復(fù)數(shù)計(jì)算器程序, 可以實(shí)現(xiàn)以下功能, 請按對應(yīng)的按鍵 (1-7)nnn; coutt=MENU=n;coutt1: 多復(fù)數(shù)加法,以 0 結(jié)束 n;coutt2: 多復(fù)數(shù)減法,以 0 結(jié)束 n;coutt3: 測試 100 以內(nèi)的復(fù)數(shù)加減乘法運(yùn)算, 1 次測試 10 道題

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論