您的位置:首页 > 编程语言 > PHP开发

《第九周任务三》定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然

2012-04-16 19:11 736 查看
/*

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生

* All rights reserved.

* 文件名称:定义分数类中《和》运算符重载,实现分数的输入输出,改造源程序中对运算结果显示方式,使程序读起来更自然

* 作    者:  张启立                          

* 完成日期:  2012年 4 月 16 日

* 版 本 号: 9-3-1        

 

* 对任务及求解方法的描述部分

* 代码实现

#include<iostream>

using namespace std;

class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
int gcd(int nu, int de);
public:
//构造函数及运算符重载的函数声明
CFraction(int nu = 0, int de = 1):nume(nu), deno(de){}; //构造函数,初始化用

friend CFraction operator + (CFraction &c1,CFraction &c2);
friend CFraction operator - (CFraction &c1,CFraction &c2);
friend CFraction operator * (CFraction &c1,CFraction &c2);
friend CFraction operator / (CFraction &c1,CFraction &c2);
friend CFraction operator - (CFraction &c);

bool operator > (CFraction &t);
bool operator < (CFraction &t);
bool operator >= (CFraction &t);
bool operator <= (CFraction &t);
bool operator == (CFraction &t);
bool operator != (CFraction &t);

void Simplify();   //化简函数(使分子分母没有公因子)
friend ostream& operator << (ostream&,CFraction&);
friend istream& operator >> (istream&,CFraction&);

};
//重载函数的实现及用于测试的main()函数
ostream& operator << (ostream&output,CFraction&f)
{
output << f.nume << "/" << f.deno;

return output;
}

istream& operator >> (istream&input,CFraction&f)
{
char c;
do
{
input >> f.nume >> c >> f.deno;
}while(c != '/');

return input;
}
void CFraction::Simplify() //化简函数(使分子分母没有公因子)
{
int n ;

if(nume < 0  && deno > 0)
{
n = gcd(-nume, deno);
}
else if(nume > 0  && deno > 0)
{
n = gcd(nume, deno);
}
else if(nume > 0  && deno < 0)
{
n = gcd(nume, -deno);
}
else if(nume < 0  && deno < 0)
{
n = -gcd(-nume, -deno);
}
nume = nume / n;

deno = deno / n;

}

int CFraction::gcd(int nu, int de)    //辗转相除法,求最大公约数
{
int t, r, a, b;

a = nu;

b = de;

if (a < b)
{
t = a;
a = b;
b = t;
}
while (b != 0)
{
r = a % b;
a = b;
b = r;
}
return a;
}

CFraction operator + (CFraction &c1,CFraction &c2)
{
CFraction c;//先通分,再相加

c.nume = c1.nume * c2.deno + c2.nume * c1.deno;

c.deno = c1.deno * c2.deno;

return c;
}

CFraction operator - (CFraction &c1,CFraction &c2)
{
CFraction c;//先通分,再相减

c.nume = c1.nume * c2.deno - c2.nume * c1.deno;

c.deno = c1.deno * c2.deno;

return c;
}

CFraction operator * (CFraction &c1,CFraction &c2)
{
CFraction c;//分子分母分别相乘

c.nume = c1.nume * c2.nume;

c.deno = c1.deno * c2.deno;

return c;
}

CFraction operator / (CFraction &c1,CFraction &c2)
{
CFraction c;//相除即乘以倒数

c.nume = c1.nume * c2.deno;

c.deno = c1.deno * c2.nume;

return c;
}

CFraction operator - (CFraction &c)
{
c.nume = 0 - c.nume;

return c;

}

bool CFraction::operator > (CFraction &t)
{
if(nume * t.deno > t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}

bool CFraction::operator < (CFraction &t)
{
if(nume * t.deno < t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}
bool CFraction::operator >= (CFraction &t)
{
if(nume * t.deno >= t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}
bool CFraction::operator <= (CFraction &t)
{
if(nume * t.deno <= t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}
bool CFraction::operator == (CFraction &t)
{
if(nume * t.deno == t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}
bool CFraction::operator != (CFraction &t)
{
if(nume * t.deno != t.nume * deno)//先通分,在比较
{
return true;
}
else
{
return false;
}
}

void main()
{
CFraction c1, c2, c;

cout << "请输入你要输入的分数:(例:3/7)" <<endl;

cin >> c1 >>c2 ;

c1.Simplify();

cout << "c1 =" << c1 << endl;

c2.Simplify();

cout << "c2 =" << c2 << endl;

c = c1 + c2;

c.Simplify();

cout << "c1 + c2 =" << c <<endl;

c = c1 - c2;

c.Simplify();

cout << "c1 - c2 =" << c <<endl;

c = c1 * c2;

c.Simplify();

cout << "c1 * c2 =" << c <<endl;

c = c1 / c2;

c.Simplify();

cout << "c1 / c2 =" << c << endl;

c = - c1;

cout << "-c1 =" << c << endl;

if(c1 > c2)
{
cout << "c1 > c2" << endl;
}
if(c1 < c2)
{
cout << "c1 < c2" << endl;
}
if(c1 >= c2)
{
cout << "c1 ≥ c2" << endl;
}
if(c1 <= c2)
{
cout << "c1 ≤ c2" << endl;
}
if(c1 == c2)
{
cout << "c1 = c2" << endl;
}
if(c1 != c2)
{
cout << "c1 ≠ c2" << endl;
}
system("pause");
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐