分数计算器设计

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

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

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

资源描述

分数计算器设计黔南民族师范学院计算机科学系姓名:何--指导老师:任--学号:1208075---班级:B12计科班日期:2013.12.21、问题描述定义一个整数类。定义一个分数类,由整数类派生出。能对分数进行各种计算和输入/输出。2、功能要求(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。(2)输入/输出:对流提取和流插入运算符进行重载。(3)计算功能:可进行分数的加、减、乘和除法运算。(4)化简功能:将分数化简为最简分数。(5)异常处理功能:分数中分母不能为零。(6)菜单功能:每种功能的操作都是在菜单中进行相应选择。3、问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;Main.obj分数计算器.objmain.exe(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告。源代码://分数计算器h.h:#includeiostream.hclassInteger//整数类{头文件声明整数类声明派生类成员函数定义主函数定义类的对象定义成员函数主函数成员函数定义protected:intfz;intfm;public:Integer(inta=0,intb=1):fz(a),fm(b){}~Integer(){}voiddisplay();};classFraction:publicInteger//分数类,进行计算和输入输出{public:Fraction(inta=0,intb=1):Integer(a,b){}friendistream&operator(istream&,Fraction&);//重载输入流friendostream&operator(ostream&,Fraction&);//重载输出流Fractionoperator+(Fraction&c);//重载+运算符(分数与分数)Fractionoperator+(intn);//重载+运算符(整数与分数)Fractionoperator-(Fraction&c);//重载-运算符(分数与分数)Fractionoperator-(intn);//重载-运算符(整数与分数)friendFractionoperator-(intn,Fraction&c);Fractionoperator*(Fraction&c);//重载*运算符(分数与分数)Fractionoperator*(intn);//重载*运算符(整数与分数)Fractionoperator/(Fraction&c);//重载/运算符(分数与分数)Fractionoperator/(intn);//重载/运算符(整数与分数)friendFractionoperator/(intn,Fraction&c);Fractionpredigest();//约分函数voiddisplay();};//实现函数(分数计算器设计)#includeiostream.h#include分数计算器h.hvoidInteger::display(){coutendl;cout------------------分数计算器-----------------endlendl;cout请选择功能:endl;cout1分数与整数的四则运算。endlendl;cout2整数与分数的四则运算。endlendl;cout3分数与分数的四则运算。endlendl;cout0输入0退出。endlendl;}FractionFraction::predigest()//定义约分函数{intn,d,t,sign=1;Fractiontemp;if(fz0&&fm0){fz=-fz;fm=-fm;}if(fz0&&fm0){fm=-fm;sign=-1;}if(fz0&&fm0){fz=-fz;sign=-1;}n=fz;d=fm;intr;if(nd)//辗转相除,求分子n与分母d的最大公约数{t=n;n=d;d=t;}r=n%d;while(r!=0){n=d;d=r;//d为最大公约数r=n%d;}temp.fz=sign*(fz/d);temp.fm=fm/d;returntemp;}FractionFraction::operator+(Fraction&c)//重载两个分数的加法运算符{Fractiontemp;temp.fz=fz*c.fm+fm*c.fz;temp.fm=fm*c.fm;returntemp;}FractionFraction::operator+(intn)//重载分数和整数的加法运算{Fractiontemp;temp.fz=fm*n+fz;temp.fm=fm;returntemp;}Fractionoperator-(intn,Fraction&c){Fractiontemp;temp.fz=c.fm*n-c.fz;temp.fm=c.fm;returntemp;}FractionFraction::operator-(intn)//重载分数减整数的减法运算符{Fractiontemp;temp.fz=fz-fm*n;temp.fm=fm;returntemp;}FractionFraction::operator-(Fraction&c)//重载两个分数的减法运算符{Fractiontemp;temp.fz=fz*c.fm-fm*c.fz;temp.fm=fm*c.fm;returntemp;}FractionFraction::operator*(Fraction&c)//重载两个分数的乘法运算符{Fractiontemp;temp.fz=fz*c.fz;temp.fm=fm*c.fm;returntemp;}FractionFraction::operator*(intn)//重载分数与整数的乘法运算符{Fractiontemp;temp.fz=fz*n;temp.fm=fm;returntemp;}FractionFraction::operator/(Fraction&c)//重载两个分数的除法运算符{Fractiontemp;temp.fz=fz*c.fm;temp.fm=fm*c.fz;returntemp;}FractionFraction::operator/(intn)//重载分数除以整数的除法运算符{Fractiontemp;temp.fz=fz;temp.fm=fm*n;returntemp;}Fractionoperator/(intn,Fraction&c){Fractiontemp;temp.fz=n*c.fm;temp.fm=c.fz;returntemp;}ostream&operator(ostream&output,Fraction&t)//重载输出运算符,输出分数{inta,b,c;a=t.fz;b=t.fm;if(a==0||b==0)//当分子,或者分母为0时,输出0cout0;if(b==1)//当分母为1时,输出分子couta;if(ab&&b!=1)//判断分数为假分数{c=a/b;a=a%b;coutc;if(a!=0)cout又a'/'b;}if(a0&&-ab&&b!=1)//当分数为负时,判断为假分数{c=-a/b;a=-a%b;c=-c;cout'='c;if(a!=0)cout又a'/'bendl;}if(t.fz0&&t.fzt.fm&&t.fm!=0&&t.fm!=1)//判断为真分数outputt.fz'/'t.fm;if(t.fz0&&-t.fzt.fm&&t.fm!=0&&t.fm!=1)//判断为真分数output(t.fz'/'t.fm);returnoutput;}istream&operator(istream&input,Fraction&t)//重载输入运算符,输入分数{inta,c;charb;inputabc;if(b=='/'&&c!=0){t.fz=a;t.fm=c;}elsecout错误!!!输入格式错误或分母为0!请退出重新输入!endl;returninput;}//main函数#includeiostream.h#include分数计算器h.hintmain(){Integerdis;Fractiona,b,result,real;intm,z;charc;//数据类型dis.display();while(m!=0){cout请输入:(0-3):;cinm;if(m==1)//分数与整数的运算{coutendl请输入一个分数:;cina;coutendl请输入运算符:;cinc;coutendl输入一个正整数:;cinz;if(c=='+')result=a+z;if(c=='-')result=a-z;if(c=='*')result=a*z;if(c=='/')result=a/z;real=result.predigest();cout运算式规范为:acz'='a.predigest()cz'='realendl;coutendl;}if(m==2)//整数与分数的运算{coutendl;coutendl请输入一个正整数:;cinz;coutendl请输入运算符:;cinc;coutendl请输入一个分数:;cinb;if(c=='+')result=b+z;if(c=='-')result=z-b;if(c=='*')result=b*z;if(c=='/')result=z/b;real=result.predigest();cout运算式规范为:zcb'='zcb.predigest()'='realendl;coutendl;}if(m==3)//分数与分数的运算{coutendl;coutendl请输入一个分数:;cina;coutendl请输入运算符:;cinc;coutendl请输入一个分数:;cinb;if(c=='+')result=a+b;if(c=='-')result=a-b;if(c=='*')result=a*b;if(c=='/')result=a/b;real=result.predigest();cout运算式规范为:acb'='a.predigest()cb.predigest()'='realendl;coutendl;}}return0;}总结报告:这是我的第一次课程设计,刚开始拿到手感觉一头雾水,不知道到底是从哪里开头去设计一个课题,虽然提供了解决方案让我可以照着步骤去做,但是没有老师的辅导,下手真不容易。不过,在理清了程序设计的一条条思路后,画了设计层次图,然后一步一步深入,把程序完成了。其中也遇到很多麻烦,在网上搜索解决了问题。

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

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

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

×
保存成功