c++分数计算器

上传人:M****1 文档编号:564855579 上传时间:2023-08-04 格式:DOCX 页数:11 大小:97.29KB
返回 下载 相关 举报
c++分数计算器_第1页
第1页 / 共11页
c++分数计算器_第2页
第2页 / 共11页
c++分数计算器_第3页
第3页 / 共11页
c++分数计算器_第4页
第4页 / 共11页
c++分数计算器_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《c++分数计算器》由会员分享,可在线阅读,更多相关《c++分数计算器(11页珍藏版)》请在金锄头文库上搜索。

1、实验设计方案1、实验内容与目的(简单介绍实验内容,说明实验目的)实验目的:设计一个分数计算器:1 )实现输入 ,输出 ,+,- , * , /运算符的 重载;2)实现分子分母的约分与规格化。实验内容:你的具体选择(要详细)实现分数计算器的屏幕输入和输出:1)输入采用文件(input.txt) 输入,可以有 任意个二元分数表达式,表达式之间的分隔符自定义;2)输出到文件(output.txt)2、实验准备工作(阐述解决问题所涉及的算法思想,至少要画一个算法流程图来说明)以下为循环计算二元分数计算式的流程图:在实验中还需要面对六个运算符重载,通过运算符重载,我们可以简单的使用分数 计算,而不需要关

2、心它的结构,运算符重载,我们根据基本的数学定理,将加减乘除包 装,并重载了输入输出运算符,这样,在输入输出时便可直接输出用户方便接收的格式。、实验步骤、测试与结果分析1、源程序的设计(在此附上源程序( cpp 文件)清单)#include#include #include using namespace std;/ 创建分数类 class Fractionprivate:int nume;int deno;int Gcf(int m,int n);和 n 最大公因数public:Fraction(int n=1,int d=1);virtualFraction()void Reduction(

3、);int GetNume() constreturn nume;int GetDeno() constreturn deno;void SetNume(int n);void SetDeno(int d);Fraction operator+(const Fraction &a) const; Fraction operator-(const Fraction &a) const; Fraction operator*(const Fraction &a) const; Fraction operator/(const Fraction &a) const;ostream &operator

4、 (ostream &out,const Fraction &a); (istream &in,Fraction &a); 符/ 最大公因数函数int Fraction:Gcf(int m,int n) if(n=0) return m; 为最大公因数else return Gcf(n,m%n); / 约分函数 void Fraction:Reduction()/ 分子/ 分母/ 辅助函数,返回 m/ 约分/ 返回分子/ 返回分母/ 设置分子/ 设置分母/ 重载加法符 +/ 重载加法符 - / 重载加法符 * / 重载加法符 / 重载输出运算符/ 重载输入运算/ 如果 n=0 , m/ 否者辗

5、转相除if(deno0) / 若分母小于 0 ,将 符号提前 nume=-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 分母为 0endl; / 查出异常 Reduction(); / 约分/ 设置分母函数 void Fraction:SetNume(int n)nume=n;Reduction();/ 设置分子函数 void Fraction:SetDe

6、no(int d)if(d=0) cout 分母为 0nume*a.deno+this-deno*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.deno-this-deno*a.nume;/ 求差的分子result.deno=this-deno*a.deno;/

7、 求差的分母result.Reduction();/ 约分return result;/ 返回差/ 重载运算符 *Fraction Fraction:operator * (const Fraction &a) constFraction result;result.nume=this-nume*a.nume;/ 求积的分子result.deno=this-deno*a.deno;/ 求积的分母result.Reduction();/ 约分return result;/ 返回积/ 重载运算符 /Fraction Fraction:operator / (const Fraction &a) c

8、onstif(a.nume=0) cout 除数为 0nume*a.deno;/ 求商的分子result.deno=this-deno*a.nume;/ 求商的分母result.Reduction();/ 约分return result;/ 返回商/ 重载运算符 ostream &operator (ostream &out,const Fraction &a)outa.GetNume()/istream &operator (istream &in,Fraction &a) char ch; int m,n;/ 接收字符/ 定义分子和分母inm;inch;if(ch !=/) cout 非法

9、字符 n;if(n=0) cout 分母为 0endl; 出异常/ 输入分子/ 输入 / 输入分母/ 如果分母为 0 ,输a.SetNume(m);a.SetDeno(n);a.Reduction();return in;int main(void)Fraction obj1,obj2,result;char index,ch;ifstream infile(input.txt,ios:in);if(!infile)cout 打开文件 input.txt 失败! endl; exit(1);ofstream outfile(output.txt,ios:app); if(!outfile)co

10、ut 打开文件 output.txt 失败 endl; exit(1);outfileobj1; infileindex;符号infileobj2; infilech;果/ 设置分子/ 设置分母/ 约分/ 返回输入流/ 定义两个分数和结果/ 定义符号/ 以输入的方式打开文件/ 若文件打开失败/ 以输出的方式打开文件/ 若文件打开失败endl;/ 无限次循环直到求解/ 输入第一个分数/ 输入需要执行的操作/ 输入第二个分数/ 选择继续或者计算结if(index=+) result=obj1+obj2;/ 加法else if(index=-) result=obj1-obj2; / 减法else

11、if(index=*) result=obj1*obj2;/ 乘法else if(index=/) result=obj1/obj2;/ 除法else system(PAUSE); return 0;cout 正在计算 obj1 index obj2.endl;ofstream outfile(output.txt,ios:app); if(!outfile)cout 打开文件 output.txt 失败 endl; exit(1);outfileobj1 index obj2 = resultendl;/ 输 出 结 果 到 output.txt/ 若遇到; ,继续执行 / 若遇到= ,计算

12、结果谢谢使用cout计算完成,结果保存在 output.txt中endlendl;if(ch=;) continue;else if(ch=)outfileendlendl;break;outfile.close();infile.close();/ 文件输出流关闭/ 文件输出流关闭system(PAUSE);return 0;2、实验现象及结论(应用文字和程序运行的截图说明程序测试现象,并解释结果)input.txt输入截图如下:Jcsy.exe 执行截图如下:7 B:Progras FilesCYuanbinwvteMp_ exe 正在计算S *耳算完成,结果保存在output,txt中 正在计M1/6 * 5/6计算完成.结果慄存在output,txt中请按任意犍继续-output.txt输出截图如下:in put.txt输入截图如下:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号