#include<iostream>
#include<cmath>
using namespace std;
enum number{zero,one,two,three,four};
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(number style=zero); //输出:以8/6为例,style为0时,原样输出8/6;
//style为1时,输出化简后形式4/3;
//style为2时,输出1(1/3)形式,表示一又三分之一;
//style为3时,用小数形式输出,如1.3333
//不给出参数和非1、2,认为是方式0
friend CFraction operator+(const CFraction&a,const CFraction&b);
friend CFraction operator+(const int n,const CFraction&a);
CFraction operator+(const int n);
CFraction operator+=(const CFraction&a);
};
//额外的两个普通函数
int GCD(int m,int n);//求两个数的最大公约数。
int LCM(int m,int n);//求两个数的最小公倍数。
int main()
{
CFraction aa(16,12);
CFraction bb(18,10);
cout<<"友元函数+:";
CFraction cc;
cc=aa+bb;//cc=aa-bb;//可以直接替换变成减法
cc.output(zero);
cc.output(one);
cout<<"成员函数+=:";
aa+=bb;//aa-=bb;//可以直接替换变成减法
aa.output(zero);
aa.output(one);
cout<<endl;
CFraction dd(8,6);
int n=5;
cout<<"dd+n="<<endl;
CFraction ff;
ff=dd+n;
ff.output(zero);
ff.output(one);
cout<<"n+dd="<<endl;
ff=n+dd;
ff.output(zero);
ff.output(one);
return 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()
{
cout<<"输入分子:";
cin>>nume;
cout<<"输入分母:";
cin>>deno;
}
void CFraction::simplify()
{
int divisor=abs(GCD(nume,deno));
nume/=divisor;
deno/=divisor;
}
int GCD(int m,int n)
{
int r=m%n;
while(r)
{
m=n;
n=r;
r=m%n;
}
return n;
}
int LCM(int m,int n)
{
return (m*n)/GCD(m,n);
}
void CFraction::amplify(int n)
{
nume*=n;
}
void CFraction::output(number style)
{
switch(style)
{
case zero: cout<<nume<<"/"<<deno<<endl;break;
case one: simplify();cout<<nume<<"/"<<deno<<endl;break;
case two: cout<<nume/deno<<"("<<nume%deno<<"/"<<deno<<")"<<endl;break;
case three:cout<<(double)nume/deno<<endl;break;
default : cout<<"输入错误。。"<<endl;break;
}
}
CFraction operator+(const CFraction&a,const CFraction&b)
{
CFraction c;
int n=LCM(a.deno,b.deno);
c.nume=a.nume*(n/a.deno)+b.nume*(n/b.deno);
c.deno=n;
return c;
}
CFraction CFraction::operator+=(const CFraction&a)
{
*this=*this+a;
return *this;
}
CFraction operator+(const int n,const CFraction&a)
{
return a+n;
}
CFraction CFraction:: operator+(const int n)
{
CFraction c=*this;
c.nume+=n*deno;
return c;
}
分数类和整型数的四则运算(只写了加法)
最新推荐文章于 2017-06-27 16:35:27 发布