第六周项目1==分数类的雏形

来源:互联网 发布:路由器域名重定向设置 编辑:程序博客网 时间:2024/04/30 06:00



 

 
问题及代码:


/*
 
*copyright (t) 2004,烟台大学计算机学院
 
*All rights reserved.
 
*文件名称:test.cpp
 
*作者:张晴晴
 
*完成日期:2016年4月7日

*版本号:v1.0

*问题描述:完成分数的几个运算。

*输入描述:分数及操作需要使用到的量。 
 
*程序输出:输出按要求得到的数。
 
*/ 

#include<iostream>
using namespace std;
class cfraction
{
private:
    int nume;  // 分子
    int deno;
     int  nume1;
     int  deno1; // 分母
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();        //放大n倍,如2/3放大5倍为10/3
    void output(int style=0);
    }; //输出:以8/6为例,style为0时,原样输出8/6;

cfraction::cfraction(int nu,int de):nume(nu),deno(de){}

   void cfraction::set(int nu,int de) //置值,改变值时用
   {
      nume=nu;
      deno=de;
   }
    void cfraction::input() //按照"nu/de"的格式,如"5/2"的形式输入
    {
       char p;
       cout<<"请输入您要操作的分数:"<<endl;
       cin>>nume>>p>>deno;
    }
    void cfraction::simplify() //化简(使分子分母没有公因子)
    {
        int nu=nume;
        int de=deno;
        int t;
        while(de>0)//求最大公约数
     {
       t=nu%de;
       nu=de;
       de=t;
     }
     nume1=nume/nu;

     deno1=deno/nu;
     cout<<" 化简后为:";
     cout<<nume1<<'/'<<deno1<<endl;

    }
    void cfraction::amplify()//放大n倍,如2/3放大5倍为10/3
    {
          int n;
         cout<<"扩大倍数为:";
         cin>>n;
         nume=nume*n;
         cout<<"扩大"<<n<<"倍后为:"<<nume<<'/'<<deno<<endl;
    }

    void cfraction::output(int style) //输出:以8/6为例,style为0时,原样输出8/6;
    {
        if(style==0)
            cout<<"style0:您输入为:"<<nume<<'/'<<deno<<endl;
        else if(style==1)
            cout<<"style1:化简为:"<<nume1<<'/'<<deno1<<endl;
        else if(style==2)
                {
                    if(nume/deno<=1)
                    cout<<"style2:"<<nume<<'/'<<deno<<endl;

                    else if (nume/deno>1)
                    cout<<"style2:"<<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl;
                }
        else if(style==3)
             cout<<"style3:小数形式为:"<<(float)nume/(float)deno<<endl;

    }
      int main()
    {

      cfraction grade;
      grade.input ();
      grade.simplify();
      grade.amplify();
      grade.simplify();    //开始这个地方错了,应该在放大倍数之后再化简一次才能输出放大后被化简的值。
      grade.output(0);
      grade.output(1);
      grade.output(2);
      grade.output(3);
      return 0;
    }


 
运行结果:


 
 
 
 
 
知识点总结:注意主函数里面的函数运算顺序。
 
 
 
学习心得:求最大公约数的步骤记住!!

0 0