第五周项目二:分数类
来源:互联网 发布:英伟达游戏优化扫描 编辑:程序博客网 时间:2024/05/17 04:40
/* * 程序的版权和版本声明部分 * 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; }
输出结果: