#include <iostream> #include<cstdlib> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1):nume(nu),deno(de) {} //构造函数,初始化用 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 }; void CFraction::input() { int nu,de; char c; cin>>nu>>c>>de; set(nu,de); } void CFraction::set(int nu,int de) { nume=nu; deno=de; } void CFraction::simplify() { int i,t; if(nume>deno) t=nume; else t=deno; for(i=2; i<t; i++) { while(nume%i==0&&deno%i==0) { nume/=i; deno/=i; } } } void CFraction::amplify(int n) { nume*=n; } void CFraction::output(int style) { int n;//整型!!!!! switch(style) { case 0: cout<<nume<<"/"<<deno<<endl; cout<<" "<<endl; break; case 1: cout<<nume<<"/"<<deno<<endl; cout<<" "<<endl; break; case 3: cout<<double(nume)/double(deno)<<endl; cout<<" "<<endl; break; case 2: n=nume/deno; nume=nume-n*deno; cout<<n<<"("<<nume<<"/"<<deno<<")"<<endl; cout<<" "<<endl; break; } } int main() { int style,n,m; CFraction cf; cout<<"输入值:(nu/de)"<<endl; cf.input(); while(true) { cout<<"请输入您的选择:"<<endl; cout<<"1. style=0. 2. style=1"<<endl; cout<<"3. style=2. 4. style=3"<<endl; cout<<"5. 扩大N倍 0. 退出."<<endl; cin>>n; switch(n) { case 0: exit(0); case 1: style=0; cf.output(style); break; case 2: style=1; cf.simplify(); cf.output(style); break; case 3: style=2; cf.output(style);//最初的时候没有写style 结果老是不对 break; case 4: style=3; cf.output(style); break; case 5: cout<<"输入要扩大的倍数:"<<endl; cin>>m; cf.amplify(m); style=0; cf.output(style); break; } } return 0; }
五周 项目2 分数类的雏形 这个程序有BUG 但是我改不出来 求赐教,布布扣,bubuko.com
五周 项目2 分数类的雏形 这个程序有BUG 但是我改不出来 求赐教
原文:http://blog.csdn.net/zjx211314/article/details/22087427