第八周任务三实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:   第八周任务三                           
* 作    者:     石丽君                         
* 完成日期:       2012  年4       月9        日
* 版 本 号:          

* 对任务及求解方法的描述部分
* 输入描述: 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。

* 问题描述: 
* 程序输出: 
* 程序头部的注释结束
*/

#include<iostream>
using namespace std;
int gcd(int m,int n);  
class CFraction
{
private:
 int nume;  // 分子
 int deno;  // 分母
public:
 CFraction(int nu=0,int de=1);   //构造函数,初始化用   
    void Set(int nu=0,int de=1);    //置值,改变值时用   
 CFraction operator+(CFraction &c2);
 CFraction operator-(CFraction &c2);
 CFraction operator*(CFraction &c2);
 CFraction operator/(CFraction &c2);
 bool operator>=(CFraction &c2);
 CFraction operator-();
 void display(); 
 void Simplify();   //化简(使分子分母没有公因子)
 
};
CFraction::CFraction(int nu,int de)  
{  
    if(de!=0)  
    {  
        nume=nu;  
        deno=de;  
    }  
    else  
    {  
        cout<<"格式错误,程序退出\n";  
        system("pause");  
        exit(0);  
    }  
}  
void CFraction:: Set(int nu,int de)  
{  
    if(de!=0)  
    {  
  
        nume=nu;  
        deno=de;  
    }  
} 
void  CFraction::display() 
{
 cout<<nume<<'/'<<deno<<endl;
}
//求分子,分母最大公约数   
int gcd(int m,int n)  
{  
    int r;  
    if(m<n)  
    {  
        r=m;  
        m=n;  
        n=r;  
    }  
    while(r=m%n)  
    {  
        if(r==0)  
            break;  
        m=n;  
        n=r;  
    }  
    return n;  
}  
//将分数化简   

void CFraction::Simplify()  
{  
    int n=gcd(nume,deno);  
    nume=nume/n;  
    deno=deno/n;
 cout<<nume<<'/'<<deno;  
}  
CFraction CFraction::operator+(CFraction &c2)
{
 CFraction c;
 c.deno=deno*c2.deno;
 c.nume=nume*c2.deno+c2.nume*deno;
 return c;
}
CFraction CFraction::operator-(CFraction &c2)
{
 CFraction c;
 c.deno=deno*c2.deno;
 c.nume=nume*c2.deno-c2.nume*deno;
 return c;
}
CFraction CFraction::operator*(CFraction &c2)
{
 CFraction c;
 c.deno=deno*c2.deno;
 c.nume=nume*c2.nume;
 return c;
 
}
CFraction CFraction::operator/(CFraction &c2)
{
 CFraction c;
 c.deno=deno*c2.nume;
 c.nume=nume*c2.deno;
 return c;
 
}
bool CFraction::operator>=(CFraction &c2)
{
 nume=nume*c2.nume;
 c2.nume=c2.nume*deno;
 if(nume>=c2.nume)
  return true;
 else
  return false;
 
 
}
CFraction CFraction::operator-()
{
 CFraction c;
 c.nume=-nume;
 c.deno=deno;
 return c;
}
void main()
{
 CFraction c1(3,4),c2(5,6),c;
 cout<<"c1=";
 c1.display();
 cout<<"c2=";
 c2.display();
 c=c1+c2;
 cout<<"c1+c2=";
 c.Simplify();
 cout<<endl;
 c=c1-c2;
 cout<<"c1-c2=";
 c.Simplify();
 cout<<endl;
 c=c1*c2;
 cout<<"c1*c2=";
 c.Simplify();
 cout<<endl;
 c=c1/c2;
 cout<<"c1/c2=";
 c.Simplify();
 cout<<endl;
 c=-c1;
 cout<<"-c1=";
 c.Simplify();
 cout<<endl;
 if(c1>=c2) cout<<"c1>=c2"<<endl;
 system("pause");
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值