第6周项目1-分数类的雏形(4)

来源:互联网 发布:怎么看windows 版本 编辑:程序博客网 时间:2024/06/15 14:36
/* *Copyright(C) 2016,计算机与控制工程学院 *All rights reserved. *文件名:test.cpp *作者:张志新 *完成日期:2016年4月10日 *版本号:v1.0 * *问题描述:分数的输入输出(4)。 */  #include<iostream>#include<Cmath>   #include<cstdlib> using namespace std;int gcd(int n,int d);class CFraction{private:    int nume;  // 分子    int deno;  // 分母public:    CFraction(int nu=0,int de=1);   //构造函数,初始化用     void input();               //按照"nu/de"的格式,如"5/2"的形式输入void set(int nu=0,int de=1);    //置值,改变值时用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时,输出1(1/3)形式,表示一又三分之一;                            //style为2时,用小数形式输出,如1.3333;                            //默认方式0};CFraction::CFraction(int nu,int de)  {      if(de!=0)      {          nume=nu;          deno=de;      }      else      {          cout<<"输入格式错误";      }  }  void CFraction::input(){int nu,de;char c;while(1){cout<<"输入分数(m/n):";cin>>nu>>c>>de;if(c!='/')cout<<"输入格式错误!\n";else if(de==0)cout<<"分子不能为零!\n";elsebreak;}nume=nu;deno=de;}void CFraction::set(int nu,int de){nume=nu;deno=de;}void CFraction::simplify(){   int n=gcd(nume,deno);   nume=nume/n;   deno=deno/n;}void CFraction::output(int style)  {  int n=gcd(nume,deno);   switch(style)    {      case 0:   cout<<"原样输出:"<<endl;   cout<<nume<<'/'<<deno<<endl;   break;    case 1:       cout<<"化简后的分数:"<<endl;       cout<<nume/n<<'/'<<deno/n<<endl;   break;    case 2:   if(nume<deno)   cout<<"无带分数形式!"<<endl;   else   {   cout<<"带分数形式输出:"<<endl;   cout<<nume/deno<<"("<<nume%deno<<'/'<<deno<<")"<<endl;   }   break;   case 3:   cout<<"小数形式输出:"<<endl;   cout<<nume/(double)deno<<endl;   break;   default:   cout<<"默认输出"<<endl;       cout<<nume<<'/'<<deno<<endl;   }}  void CFraction::amplify(int n){nume=nume*n;}int gcd(int n,int d){ int t,r; if(n==0) { return d; }   if(n>d)   {      t=n;  n=d;  d=t;   }   while(r!=0)   {   r=d%n;   d=n;   n=r;   }return d;}int main(){CFraction c1,c2(4,5);c1.input();    c1.output(0);    c1.output(1); c1.output(2);c1.output(3);cout<<"改变分数和之后:"<<endl;c2.output(0);c2.set(8,9);//改变分数的之后c2.output(0);    c2.output(1); c2.output(2);c2.output(3);c2.amplify(4);cout<<"加倍后:"<<endl;c2.output(0);    c2.output(1); c2.output(2);c2.output(3);return 0;}

学习心得:

 写这个程序出现了一个很小的问题一直没发现,出现在的求最大公约数的函数上,因为返回值错误导致一运行到那里程序就会崩,最后通过调试解决了错误。

0 0