第6周项目1—分数类的雏形
2016-04-05 19:08
375 查看
/* *Copyright(c) 2016.烟台大学计算机与控制工程学院 *ALL rights reserved. *文件名称:test.cpp *作者:杨驰 *完成日期:2016年4月5日 *问题描述: 本任务将设计一个简单的分数类,完成对分数的几个运算。 */ #include<iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 int snume; //简化后的分子 int sdeno; //简化后的分子 public: CFraction(int nu=0,int de=1); //构造函数,初始化用 void set(int nu=0,int de=1); //置值,改变值时用 void input(); //按照"nu/de"的格式,如"5/2"的形式输入 void simplify(); //化简(使分子分母没有公因子) void amplify(int n); //放大n倍,如2/3放大5倍为10/3 void output(int style=0); //输出:以8/6为例,style为0时,原样输出8/6; //style为1时,输出化简后形式4/3; //style为2时,输出1(1/3)形式,表示一又三分之一; //style为3时,用小数形式输出,如1.3333; //默认方式0 }; CFraction::CFraction(int nu,int de):nume(nu),deno(de){} void CFraction::set(int nu,int de) { nume=nu; deno=de; } void CFraction::input() { char temp; cin>>nume>>temp>>deno; } void CFraction::simplify() { int t; int nu=nume; int de=deno; while(nu%de) { t=nu%de; nu=de; de=t; } snume=nume/de; sdeno=deno/de; } void CFraction::amplify(int n) { nume*=n; deno*=n; } void CFraction::output(int style) { if(style==0) cout<<nume<<"/"<<deno<<endl; else if(style==1) cout<<snume<<"/"<<sdeno<<endl; else if(style==2) { if((float)snume/(float)sdeno<1.0) cout<<snume<<"/"<<sdeno<<endl; else if((float)snume/(float)sdeno==1.0) cout<<snume/sdeno<<endl; else cout<<snume/sdeno<<"("<<snume%sdeno<<"/"<<sdeno<<")"<<endl; } else cout<<(float)nume/(float)deno<<endl; } int main() { CFraction d(8,6); d.simplify(); //化简 d.output(0); d.output(1); d.output(2); d.output(3); d.amplify(2); //放大n倍 d.output(0); d.set(5,2); d.output(0); d.output(1); d.output(2); d.output(3); d.input(); d.output(0); d.output(1); d.output(2); d.output(3); return 0; }
运行结果: