c++分數計算器含源碼_第1頁
c++分數計算器含源碼_第2頁
c++分數計算器含源碼_第3頁
c++分數計算器含源碼_第4頁
c++分數計算器含源碼_第5頁
已閱讀5頁,還剩12頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗設計方案1、實驗內容與目的(簡單介紹實驗內容,說明實驗目的)實驗目的:設計一個分數計算器:1 )實現輸入 >>,輸出VV ,+,J /運算符的重 載;2)實現分子分母的約分與規格化。實驗內容:你的具體選擇(要詳細)實現分數計算器的屏幕輸入和輸出:1)輸入采用文件(input.txt)輸入,可以有任意個二元分數表達式,表達式之間的分隔符自定義;2)輸出到文件(output.txt)2、實驗準備工作(闡述解決問題所涉及的算法思想,至少要畫一個算法流程圖來說明)以下為循環計算二元分數計算式的流程圖:在實驗中還需要面對六個運算符重載,通過運算符重載,我們可以簡單的使用分數計算,而不需要

2、尖心它的結構,運算符重載,我們根據基本的數學定理,將加減乘除包裝,并重載了輸入輸出運算符,這樣,在輸入輸出時便可直接輸出用戶方便接收的格式。、實驗步驟、測試與結果分析分子分母/輔助函數,返回m約分/返回分子/返回分母/設置分子/設置分母/重載加法符+/重載加法符 /重載加法符* / 重載加法符/重載輸出運算符/重載輸入運算/ 如果 n=0,m/否者輾轉相除1、源程序的設計(在此附上源程序(cpp文件)清單)#include<iostream>#include<fstream> #include<cmath> using namespace std;/創建分數

3、類class Fraction(private:int nume;int deno;int Gcf(int m,int n);和n最大公因數public:Fraction(int n=1 ,int d=1);virtuaFFractio n()void Reduction();int GetNume() constreturn nume;int GetDeno() constreturn deno;void SetNume(int n);void SetDeno(int d);Fraction operator+(const Fraction &a) const; Fraction o

4、perator-(const Fraction &a) const; Fraction operator*(const Fraction &a) const; Fraction operator/(const Fraction &a) const;;ostream &operator « (ostream &out,const Fraction &a); « istream &operator » (istream &in,Fraction &a);符>>/最大公因數函數int F

5、raction:Gcf(int mjnt n)(if(n=O) return m;為最大公因數 else return Gcf(n,m%n);)/約分函數void Fraction:Reduction()if(deno<0) /若分母小于0,將符號提前 mume=-nume; deno=-deno;int f=Gcf(abs(nume),deno);nume=nume/f; / 實現約數 deno=deno/f;Fraction:Fraction(int n,int d):nume(n),deno(d)if(deno=0) cout«H 分母為 0”vvendl; / 查出異常

6、 Reduction(); / 約分)/設置分母函數void Fraction:SetNume(int n)nume=n;Reduction();)/設置分子函數void Fraction:SetDeno(int d)if(d=O) cout«"分母為 Ou«endl; / 查出異常 deno=d;Reduction();)/重載運算符+Fraction Fraction:operator+(const Fraction &a) constFraction result;result.nume=this->nume*a.deno+this>de

7、no*a.nume;/ 求禾口白勺分子result.deno=this>deno*a.deno;/ 求和的分母result.Reduction();/ 約分return result;/ 返回和)/重載運算符Fraction Fraction:operator-(const Fraction &a) constFraction result;result.nume=this->nume*a.de no-this->deno*a. nume;result.deno=this->de no *a.deno;result.Reducti on();/求差的分子/求差的

8、分母 約分return result;)返回差/重載運算符*Fraction Fraction-operator * (const Fraction &a) constFraction result;result.nume=this->nume*a. nume; result.deno=this->de no *a.de no;result.Reducti on();/求積的分子/求積的分母 約分return result;)/返回積/重載運算符/Fraction Fraction-operator / (const Fraction &a) constif(a.n

9、ume=0) cout«n除數為0”vvendl;如果除數為0,輸出異常Fraction result;result.nume=this>nume*a.deno;/ 求商的分子result.deno=this>deno怙.nume;/ 求商的分母result.Reduction();/ 約分return result;/ 返回商)/重載運算符VVostream &operator « (ostream &out,const Fraction &a)out«a.GetNume()«,7,'«a.GetD

10、eno(); / 按一定格式輸出分數return out; /返回輸出流/重載運算符>>istream &operator » (istream &in,Fraction &a)(char ch;int m,n;/接收字符/定義分子和分母in»m;in> >ch;if(ch !=7*) cout«H 非法字符 n«endl;in»n;if(n=O) coutvv” 分母為 0H«endl;出異常a.SetNume(m);a.SetDeno(n);a.Reductio n();return

11、 in;int main(void)(Fraction obj1 ,obj2,result;char index,ch;ifstream infile("input.txt”,ios:in);if(iinfile)coutvv” 打開文件 input.txt 失??! "vvendl; exit(1);ofstream outfile(”output.txt”,ios:app); if(!outfile)(cout«"打開文件 output.txt 失敗 H«endl; exit(1);outfilevv”本次計算結果如下for(;)完成<

12、infile»obj1; infile»index;符號infile»obj2; infile»ch;果/輸入分子/輸入/輸入分母如果分母為0,輸/設置分子/設置分母約分/返回輸入流/定義兩個分數和結果/定義符號/以輸入的方式打開文件/若文件打幵失敗/以輸出的方式打開文件/若文件打開失敗"«endl;/無限次循環直到求解/輸入第一個分數/輸入需要執行的操作/輸入第二個分數/選擇繼續或者計算結if(index=+') result=obj1+obj2;/加法else if(index=,J) result=obj1-obj2;

13、/ 減法else if(index=,*) result=obj1*obj2;/ 乘法else if(index=7') result=obj1/obj2;/ 除法else(system(”PAUSE”); return 0;cout«"正在計算,«obj1«" ,«index«" ”vvobj2vv”"vvendl;ofstream outfile(Moutput.txt",ios:app); if(loutfile)(cout«"打開文件 output.txt 失

14、敗 n«endl; exit(1);outfile«obj1«' ”vvindexvv” ”vvobj2vv”H«result«endl;輸出結果到output.txt/若遇到丫,繼續執行 若遇到”,計算結果謝謝使用cout«n計算完成,結果保存在output.txt中n«endl«endl;if(ch=,;') continue;else if(ch=,=,)( outfile«nH«e ndlvvendl;break;outfile.close();infile.close(

15、);文件輸出流尖閉文件輸出流尖閉system(,PAUSE);return 0;2、實驗現象及結論(應用文字和程序運行的截圖說明程序測試現象,并解釋結果)input.txt 輸入截圖如下:云IP曲E =記事本 X文件g)編輯電)格式I查看辺 幫助1/2 + 1/2 ; 2/6 * 5/6 =Jcsy.exe執行截圖如下:©7 B:Progras FilesCYu¥anbinwvteMp_ exe i.在計算s *耳算完成5結果保存在output,txt中 正在計M1/6*5/6 計算完成結果慄存在output,txt中請按任意犍繼續output.txt輸出截圖如下: txl

16、F記事本文件0)編輯格式©查看辺幫助Q1)I1/2*1/2 註 1/11/6 * 5/6 = 5/36本次計算結果如下in put.txt輸入截圖如下:謝謝使用. Xiftpiit. txt文件d)編輯g)格式© 查看辺 幫助0)4/10 5/2U ; 4/5 / 4/78 =|jcsy.exe執行截圖如下:B: ProgrFilesXCYuYaiiVbinYwteMp,. exe TH在計 門 2/5 + 計算完戍5結果保存在output _txt中正在計莒4/5 # 1/78計算完成,結果保存在oiitputtxt中請按任意犍繼續.Output.txt輸出截圖如下:文件

17、匹)編輯格式©查看邊轄助 本次計算結果如下1/2 + 1/2 = 1/11/6 * 5/6 = 5/36謝謝使用本次計算結果如下2/5 + 5/24 = 73/120V5 /1/78 = 312/5謝謝使用一一3、實驗總結(是否成功解決問題,總結實驗中最有價值的內容,程序能夠在哪些方面進 步改善,自我評價成敗得失)試驗中,我們按照從簡單到復雜的方法,一步一個腳印編寫代碼,使得程序不易發生錯 誤,并且容易更正,編寫出來的程序代碼簡潔明朗,效率較高;通過對例題的學習,我們最終將正確的代碼編寫出,并在不斷地修改之下做到方便用戶 使用的要求;編碼的速度有一個從慢到快的過程,在本次試驗中,我們

18、的速度依然比較慢,這看出我 們平時編碼比較少,缺乏熟練度,并對算法了解不深入;但是我們的代碼看起來仍然有些凌亂,效率還沒有帶到真正的高效,每次運行都需要等 待幾秒鐘。再以后我們將通過練習基礎功,簡化程序代碼,實現簡單代碼完善功能的理想。1. 編碼要盡量使程序簡單,采用最切實可靠的算法,實現封裝,不同部分的代碼應分工明 確,最后由主函數統一調用;2. 編寫完成后先自己檢查一遍代碼,然后由機器檢測,找出錯誤的根源,從不同角度思考如 何解決問題;3測試時應盡可能輸入各種可能情況的數據以確保程序準確無誤。4. 應避免任何可能的漏洞,使代碼的可用性和可靠性增強。5試驗中,我按照從簡單到復雜的方法,一步一個腳印編寫代碼,使得程序不易發生錯誤, 并且容易更正,編寫出來的程序代碼簡潔明朗,效率較高;6通過對例題的學習,我最終將正確的代碼編寫出,并在不斷地修改之下做到方便用戶使用 的要求;7. 編碼的速度有一個從慢到快的過程,在本次試驗中,我的速度依然

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論