分数类雏形

问题及代码:

/*copyright.烟台大学计算机与控制工程学院.
*文件名称:分数类雏形。
*作者:马艳艳。
*完成日期:2016年4月2日
问题描述:通过构造一个分数类来实现一系列具体步骤;
*输入描述:输入想要求的分数
输出描述:一系列关于该分数的输出;
*/
#include<iostream>
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();
    void simplify();
    void amplify(int n);
    void output(int style=0);
    bool is_fenshu(int,int);

};
cfraction ::cfraction(int nu,int de)
{
    if(de!=0)
    {

        nume=nu;
    deno=de;
    }
}
bool cfraction::is_fenshu(int nu,int de)//判断是否满足作为分数的条件借用bool函数
{
    if(de!=0)
        return true;
    else
        return false;
}
 void  cfraction::set(int nu,int de)
 {
     nume=nu;
     deno=de;
 }

 void  cfraction::input()//注意格式可以多注明
 {
     int nu,de;
     char ch;
     cin>>nu>>ch>>de;
     while(1)
     {
         cout<<"请输出分数(格式m/n)"<<endl;

         if(ch!='/')
            cout<<"格式不正确,请重输"<<endl;
         else if(!is_fenshu(nu,de))//不符合条件
            cout<<"分数非法,请重新输入"<<endl;
            else
                break;
     }
     nume=nu;
     deno=de;
 }
 void cfraction::simplify()//化简,此算法运用求最大公约数的思想。
 {
     int x,y,z;
     while(y>0)
     {
         z=x%y;
         x=y;
         y=z;
     }
     nume/=x;
     deno/=x;
     cout<<nume<<'/'<<deno<<endl;
 }
  void cfraction::amplify(int n)//放大n倍
  {
      nume*=n;
      deno*=n;
      cout<<nume<<'/'<<deno<<endl;

  }
  void cfraction::output(int style)
  {
      switch(style)
      {
      case 0:
        cout<<nume<<'/'<<deno<<endl;
        break;
      case 1:
          cout<<nume/double(deno)<<endl;//分数变小数,先把分子分母其中之一转换为float或double型数据
          break;
      case 2:
        simplify();
        cout<<nume<<'/'<<deno<<endl;
          break;
      case 3://求两者作为整数的最大公约数
          int a;
          while(deno<0)
          {
              a=nume%deno;
              nume=deno;
              deno=a;

          }

        cout<<nume<<endl;
          break;
      case 4:
        cout<<nume/deno<<'('<<nume%deno<<'/'<<deno<<')'<<endl;

      default:
        cout<<"error"<<endl;
        break;

      }
  }


int main()
{

cfraction  fs;
cout<<"请输入分子分母:"<<endl;
fs.input();
cout<<"输出默认函数:"<<endl;
fs.output(0);
cout<<"分子分母同时扩大五倍:"<<endl;
fs.amplify(5);

cout<<"分数变小数:"<<endl;
fs.output(1);
cout<<"分数化简:"<<endl;
fs.simplify();
cout<<"求最大公约数:"<<endl;
fs.output(3);
cout<<"带分数形式为:"<<endl;
fs.output(4);
return 0;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值