c++分数计算器(含源码)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:设计一个分数计算器:1)实现输入,输出,+,-,*,/运算符的重载;2)实现分子分母的约分与规格化。实验内容:你的具体选择(要详细)实现分数计算器的屏幕输入和输出:1)输入采用文件(input.txt)输入,可以有任意个二元分数表达式,表达式之间的分隔符自定义;2)输出到文件(output.txt)——————————————————————————————————————2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)以下为循环计算二元分数计算式的流程图:在实验中还需要面对六个运算符重载,通过运算符重载,我们可以简单的使用分数计算,而不需要关心它的结构,运算符重载,我们根据基本的数学定理,将加减乘除包装,并重载了输入输出运算符,这样,在输入输出时便可直接输出用户方便接收的格式。——————————————————————————————————————二、实验步骤、测试与结果分析输入第一个分数输入运算符输入第二个分数输入判断符号计算结果保存结果到output.txt中若为“=”若为“;”结束本次计算1、源程序的设计(在此附上源程序(cpp文件)清单)#includeiostream#includefstream#includecmathusingnamespacestd;//-------------------------------创建分数类------------------------------------classFraction{private:intnume;//分子intdeno;//分母intGcf(intm,intn);//辅助函数,返回m和n最大公因数public:Fraction(intn=1,intd=1);virtual~Fraction(){}voidReduction();//约分intGetNume()const{returnnume;}//返回分子intGetDeno()const{returndeno;}//返回分母voidSetNume(intn);//设置分子voidSetDeno(intd);//设置分母Fractionoperator+(constFraction&a)const;//重载加法符+Fractionoperator-(constFraction&a)const;//重载加法符-Fractionoperator*(constFraction&a)const;//重载加法符*Fractionoperator/(constFraction&a)const;//重载加法符/};ostream&operator(ostream&out,constFraction&a);//重载输出运算符istream&operator(istream&in,Fraction&a);//重载输入运算符//---------------------------------最大公因数函数------------------------------intFraction::Gcf(intm,intn){if(n==0)returnm;//如果n=0,m为最大公因数elsereturnGcf(n,m%n);//否者辗转相除}//------------------------------------约分函数---------------------------------voidFraction::Reduction(){if(deno0)//若分母小于0,将符号提前{nume=-nume;deno=-deno;}intf=Gcf(abs(nume),deno);nume=nume/f;//实现约数deno=deno/f;}//----------------------------------构造函数-----------------------------------Fraction::Fraction(intn,intd):nume(n),deno(d){if(deno==0)cout分母为0endl;//查出异常Reduction();//约分}//----------------------------------设置分母函数-------------------------------voidFraction::SetNume(intn){nume=n;Reduction();}//----------------------------------设置分子函数-------------------------------voidFraction::SetDeno(intd){if(d==0)cout分母为0endl;//查出异常deno=d;Reduction();}//----------------------------------重载运算符+--------------------------------FractionFraction::operator+(constFraction&a)const{Fractionresult;result.nume=this-nume*a.deno+this-deno*a.nume;//求和的分子result.deno=this-deno*a.deno;//求和的分母result.Reduction();//约分returnresult;//返回和}//----------------------------------重载运算符---------------------------------FractionFraction::operator-(constFraction&a)const{Fractionresult;result.nume=this-nume*a.deno-this-deno*a.nume;//求差的分子result.deno=this-deno*a.deno;//求差的分母result.Reduction();//约分returnresult;//返回差}//----------------------------------重载运算符*--------------------------------FractionFraction::operator*(constFraction&a)const{Fractionresult;result.nume=this-nume*a.nume;//求积的分子result.deno=this-deno*a.deno;//求积的分母result.Reduction();//约分returnresult;//返回积}//----------------------------------重载运算符/--------------------------------FractionFraction::operator/(constFraction&a)const{if(a.nume==0)cout除数为0endl;//如果除数为0,输出异常Fractionresult;result.nume=this-nume*a.deno;//求商的分子result.deno=this-deno*a.nume;//求商的分母result.Reduction();//约分returnresult;//返回商}//----------------------------------重载运算符--------------------------------ostream&operator(ostream&out,constFraction&a){outa.GetNume()/a.GetDeno();//按一定格式输出分数returnout;//返回输出流}//----------------------------------重载运算符--------------------------------istream&operator(istream&in,Fraction&a){charch;//接收字符intm,n;//定义分子和分母inm;//输入分子inch;//输入/if(ch!='/')cout非法字符endl;inn;//输入分母if(n==0)cout分母为0endl;//如果分母为0,输出异常a.SetNume(m);//设置分子a.SetDeno(n);//设置分母a.Reduction();//约分returnin;//返回输入流}intmain(void){Fractionobj1,obj2,result;//定义两个分数和结果charindex,ch;//定义符号ifstreaminfile(input.txt,ios::in);//以输入的方式打开文件if(!infile)//若文件打开失败{cout打开文件input.txt失败!endl;exit(1);}ofstreamoutfile(output.txt,ios::app);//以输出的方式打开文件if(!outfile)//若文件打开失败{cout打开文件output.txt失败endl;exit(1);}outfile---------------------本次计算结果如下--------------------endl;for(;;)//无限次循环直到求解完成{infileobj1;//输入第一个分数infileindex;//输入需要执行的操作符号infileobj2;//输入第二个分数infilech;//选择继续或者计算结果if(index=='+')result=obj1+obj2;//加法elseif(index=='-')result=obj1-obj2;//减法elseif(index=='*')result=obj1*obj2;//乘法elseif(index=='/')result=obj1/obj2;//除法else{system(PAUSE);return0;}cout正在计算obj1indexobj2...endl;;ofstreamoutfile(output.txt,ios::app);if(!outfile){cout打开文件output.txt失败endl;exit(1);}outfileobj1indexobj2=resultendl;//输出结果到output.txtcout计算完成,结果保存在output.txt中endlendl;if(ch==';')continue;//若遇到;,继续执行elseif(ch=='=')//若遇到=,计算结果{outfile-------------------------谢谢使用------------------------endlendl;break;}outfile.close();//文件输出流关闭}infile.close();//文件输出流关闭system(PAUSE);return0;}——————————————————————————————————————2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)input.txt输入截图如下:Jcsy.exe执行截图如下:output.txt输出截图如下:input.txt输入截图如下:jcsy.exe执行截图如下:Output.txt输出截图如下:——————————————————————————————————————3、实验总结(是否成功解决问题

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功