第五周项目2:分数类
第五周项目二:分数类
/* * 程序的版权和版本声明部分 * Copyright (c)2012, 烟台大学计算机学院学生 * All rightsreserved. * 文件名称: object.cpp * 作者:李蒙 * 完成日期: 2013年 4 月 2 日 * 版本号: v1.0 * 输入描述:无 * 问题描述:函数的重载。 * 程序输出: */ #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; //不给出参数和非1、2,认为是方式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 c; cout<<"请输入一个分数(形式如a/b):"; while(1) { cin>>nume>>c>>deno; if(c!='/') cout<<"输入格式错误,请重新输入:"; else if(deno==0) { cout<<"分母不能为0,请重新输入:"; } else break; } } void CFraction::simplify() { int n; if(nume>deno) { n=deno; } else { n=nume; } while(true) { if(nume%n==0 && deno%n==0) { cout<<"最简分数为"<<nume/n<<"/"<<deno/n<<endl; break; } n--; } } void CFraction::amplify(int n) { cout<<"分子放大"<<n<<"倍后为:"<<nume*n<<"/"<<deno<<endl; } void CFraction::output(int style) { switch(style) { case 0: cout<<nume<<"/"<<deno; break; case 1: simplify(); break; case 2: cout<<nume/deno<<"("<<nume%deno<<"/"<<deno<<")"; break; case 3: cout<<nume/deno; break; } } int main() { int n=0,a=4; CFraction c; c.set(); c.input(); c.simplify(); cout<<"请输入放大倍数:"; cin>>n; c.amplify(n); cout<<"请输入输出类型<0、1、2、3>:"; cin>>a; c.output(a); return 0; }输出结果: