第五周项目二:分数类

来源:互联网 发布:英伟达游戏优化扫描 编辑:程序博客网 时间: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;  }      
输出结果: