/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 晁阳
* 完成日期: 2012 年 03 月 20 日
* 版 本 号:t 1.0
#include < iostream> using namespace std; class CFraction {private: int nume; // 分子 int deno;// 分母 //int i; public: CFraction(int nu=0,int de=1):deno(de),nume(nu){}; //构造函数,初始化用 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),表示一又三分之一; //不给出参数和非1、2,认为是方式0 }; void CFraction::input() //按照"nu/de"的格式,如"5/2"的形式输入 { char c1; cout <<"请输入一个分数(格式nu/de):"; while(1) { cin >> nume >> c1 >> deno; if ( c1 !='/' ) { cout << "输入格式不正确,请重新输入!"; } else break; } } void CFraction::Simplify() //化简(使分子分母没有公因子) { int i; if( deno < nume ) i = deno; else i = nume; for( ; i > 0; --i)//大于0啊,早晚让它折磨死!!!!!!!! { if ( nume % i == 0 && deno % i == 0 ) { nume = nume/i; deno = deno/i; break; } } } void CFraction::amplify(int n) //放大n倍,如2/3放大5倍为10/3 { nume = nume * n; } void CFraction::output(int style) //输出:以8/6为例,style为0时,输出8/6; { switch ( style ) { case 0://不给出参数和非1、2,认为是方式0 cout<<nume<<"/"<<deno<<endl;break; case 1://style为1时,输出4/3; Simplify(); cout<<nume<< "/" << deno <<endl;break; case 2://style为2时,输出1(1/3),表示一又三分之一; cout<<nume/deno<< "(" << nume%deno<<"/"<<deno<<")"<<endl;break; } } void main() { CFraction CF; CF.input(); CF.output(); CF.amplify(2); CF.Simplify(); CF.output(); CF.output(1); CF.output(2); system("PAUSE"); }