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

第9周实验报告3

2012-04-17 15:35 405 查看
实验目的:实现分数类中的运算符重载

* 程序头部注释开始

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

* 烟台大学计算机学院学生

* 文件名称:         运算符重载
* 作    者:          胡斌                

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

* 版本号:     v1.0    

* 程序头部的注释结束(此处也删除了斜杠)

#include<iostream>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
void Simplify(); //化简(使分子分母没有公因子)
CFraction operator + (CFraction  &c);
CFraction operator - (CFraction  &c);
CFraction operator * (CFraction  &c);
CFraction operator / (CFraction  &c);

CFraction operator + ();
CFraction operator - ();

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

friend ostream& operator << (ostream&, CFraction&);
friend istream& operator >> (istream&, CFraction&);

};

ostream& operator << (ostream& output, CFraction& cf)
{
cout << cf.nume << "/" << cf.deno << endl;
return output;
}
istream& operator >> (istream& input, CFraction& cf)
{
cout << "请输入要置分数的分子和分母:";
input >> cf.nume >> cf.deno;
return input;
}

void main()
{
CFraction cf1, cf2, cf3;
cin >> cf1 >> cf2;
cout << "cf1 = " << cf1;
cout << "cf2 = " << cf2;

cf3 = cf1 + cf2;
cout << "cf1 + cf2 = " ;
cf3.Simplify();

cf3 = cf1 - cf2;
cout << "cf1 - cf2 = " ;
cf3.Simplify();

cf3 = cf1 * cf2;
cout << "cf1 * cf2 = ";
cf3.Simplify();

cf3 = cf1 / cf2;
cout << "cf1 / cf2 = ";
cf3.Simplify();

cout << "对cf1取正得: ";
cf1 = + cf1;
cout << "对cf2取反得: ";
cf2 = - cf2;

if(cf1 > cf2) cout << "cf1 > cf2" << endl;
if(cf1 < cf2) cout << "cf1 < cf2" << endl;
if(cf1 == cf2) cout << "cf1 = cf2" << endl;
if(cf1 != cf2) cout << "cf1 ≠ cf2" << endl;
if(cf1 >= cf2) cout << "cf1 ≥ cf2" << endl;
if(cf1 <= cf2) cout << "cf1 ≤ cf2" << endl;

system("pause");
}

void CFraction::Simplify()
{
int a[10], j = 0;
for(int i = 1; i <= nume; i++)
{
if(nume % i == 0)
{
a[j] = i;
j++;
}
}
//定义a[10]数组用于存储nume的因数
int b[10], m = 0;
for(int n = 1; n <= deno; n++)
{
if(deno % n == 0)
{
b[m] = n;
m++;
}
}
//定义b[10]数组用于存储deno的因数
for(int k = 0; k <= (j - 1); k++)
{
for(int p = 0; p <= (m - 1); p++)
{
if(a[k] == b[p])
{
nume = nume / a[k];
deno = deno / a[k];
}
}
}
cout << nume << "/" << deno << endl;
}

CFraction CFraction::operator + (CFraction  &c)
{
CFraction C;
C.deno = deno * c.deno;
C.nume = nume * c.deno + c.nume * deno;
return C;
}

CFraction CFraction::operator - (CFraction  &c)
{
CFraction C;
C.deno = deno * c.deno;
if(nume * c.deno < c.nume * deno)
{
C.nume = -(c.nume * deno - nume * c.deno);
}
else
C.nume = nume * c.deno - c.nume * deno;
return C;
}

CFraction CFraction::operator * (CFraction  &c)
{
CFraction C;
C.deno = deno * c.deno;
C.nume = nume * c.nume;
return C;
}
CFraction CFraction::operator / (CFraction  &c)
{
CFraction C;
C.deno = deno * c.nume ;
C.nume = nume * c.deno;
return C;
}

CFraction CFraction::operator - ()
{
CFraction C;
C.deno = deno;
C.nume = nume;
cout << "-(" << C.nume << "/" << C.deno << ")" << endl;
return C;
}

CFraction CFraction::operator + ()
{
CFraction C;
C.deno = deno;
C.nume = nume;
cout << "+(" << C.nume << "/" << C.deno << ")" << endl;
return C;
}

bool CFraction::operator > (CFraction &c)
{
deno = deno * c.deno;
c.deno = deno;
if((nume * c.deno) > (c.nume * deno))
return true;
else
return false;
}
bool CFraction::operator < (CFraction &c)
{
deno = deno * c.deno;
c.deno = deno;
if((nume * c.deno) < (c.nume * deno))
return true;
else
return false;
}
bool CFraction::operator == (CFraction &c)
{
deno = deno * c.deno;
c.deno = deno;
if((nume * c.deno) == (c.nume * deno))
return true;
else
return false;
}
bool CFraction::operator != (CFraction &c)
{
deno = deno * c.deno;
c.deno = deno;
if((nume * c.deno) == (c.nume * deno))
return false;
else
return true;
}
bool CFraction::operator >= (CFraction &c)
{
if((nume * c.deno) >= (c.nume * deno))
return true;
else
return false;
}
bool CFraction::operator <= (CFraction &c)
{
if((nume * c.deno) <= (c.nume * deno))
return true;
else
return false;
}

截图:

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