#include <iostream> #include <cmath> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 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 }; int huajian (int a,int b) { int k,r,m,n; m=a; n=b; if (m<n) { k=m;m=n;n=k; } while(n!=0) { r=m%n; m=n; n=r; } return m; } int main() { int n; CFraction c1; c1.input(); c1.output(0); c1.output(1); c1.output(2); c1.output(3); cout<<"增加n倍"<<endl; cin>>n; c1.amplify(n); c1.output(0); c1.output(1); c1.output(2); c1.output(3); return 0; } CFraction::CFraction(int nu,int de) { nume=nu; deno=de; } void CFraction::set(int nu,int de) { if (de!=0) { nume=nu; deno=de; } } void CFraction::input() { char c; int nu,de; cout<<"输入分数m/n"<<endl; cin>>nu>>c>>de; if(de==0) { cout<<"分母不能为零"<<endl; CFraction::input(); } else if (c!=‘/‘) { cout<<"符号错误"<<endl; } else { nume=nu; deno=de; } } void CFraction::simplify()//化简 { nume=nume/huajian(nume,deno); deno=deno/huajian(nume,deno); } void CFraction::amplify(int n) { nume=nume*n; } void CFraction::output(int style) { int n,m; m=nume; n=deno; switch (style) { case 0: cout<<nume<<‘/‘<<deno<<endl;break; case 1: cout<<nume/huajian(nume,deno)<<‘/‘<<deno/huajian(nume,deno)<<endl;break; case 2: cout<<nume/deno<<‘(‘<<nume%deno/huajian(nume,deno)<<‘/‘<<deno/huajian(nume,deno)<<‘)‘<<endl;break; case 3: cout<<nume/deno<<endl; } }
原文:http://blog.csdn.net/u012313437/article/details/22282413