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

第九周 任务三

2012-04-14 22:28 239 查看
/*
实验内容:定义分数类中<<和>>运算符重载
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 定义分数类中<<和>>运算符重载
* 作    者:  薛广晨
* 完成日期:  2012       年  4    月  14      日
* 版 本号:  x1.0
*/
//【任务3】接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
#include<iostream>

using namespace std;

class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
public:
CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){};   //构造函数,初始化用
void output1();

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

CFraction operator+(CFraction &c1);
CFraction operator-(CFraction &c1);
CFraction operator*(CFraction &c1);
CFraction operator/(CFraction &c1);

CFraction operator-();//取反

//比较运算符(二目)的重载
bool operator > (CFraction &c1);
bool operator < (CFraction &c1);
bool operator >= (CFraction &c1);
bool operator <= (CFraction &c1);
bool operator == (CFraction &c1);
bool operator != (CFraction &c1);

};

ostream& operator << (ostream &ouput, CFraction &c)
{
int i;
if(c.deno == 0)
cout<<"error"<<endl;
if(c.nume >= 0)
{
if(c.deno < c.nume)i = c.deno;
else i = c.nume;
for(; i > 0; --i)
{
if(c.nume % i == 0 && c.deno % i == 0)
{
c.nume = c.nume / i;
c.deno = c.deno / i;
break;
}
}
ouput << c.nume << "/" << c.deno << endl;
}
else
{
c.nume = -c.nume;
if(c.deno < c.nume)i = c.deno;
else i = c.nume;
for(; i > 0; --i)
{
if(c.nume % i == 0 && c.deno % i == 0)
{
c.nume = c.nume / i;
c.deno = c.deno / i;
break;
}
}
ouput << -c.nume << "/" << c.deno << endl;
}
return ouput;
}

istream& operator >> (istream &input, CFraction &c)
{
char c1;
cout << "请输入一个分数(格式:x/y):";
input >> c.nume >> c1 >> c.deno;
do
{
if(c1 == '/')break;
else
{
cout << "格式错误,请重新输入一个分数(格式:x/y):";
input >> c.nume >> c1 >> c.deno;
}
}while(1);
return input;
}

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

CFraction CFraction :: operator-(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.deno;
c2.nume = nume * c1.deno - c1.nume * deno;
return c2;
}

CFraction CFraction :: operator*(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.deno;
c2.nume = nume * c1.nume;
return c2;
}

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

CFraction CFraction :: operator-()//取反
{
CFraction c2;
c2.nume = -nume;
c2.deno = deno;

return c2;
}

void CFraction :: output1()
{
cout << nume << "/" << deno << endl;
}

//比较运算符(二目)的重载
bool CFraction :: operator > (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if(c2.nume > c3.nume)return true;
else return false;
}

bool CFraction :: operator < (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if(c2.nume < c3.nume)return true;
else return false;
}

bool CFraction :: operator >= (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if(c2.nume < c3.nume)return false;
else return true;
}

bool CFraction :: operator <= (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if(c2.nume > c3.nume)return false;
else return true;
}

bool CFraction :: operator == (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if((c2.nume >= c3.nume) && (c2.nume <= c3.nume))return true;
else return false;
}

bool CFraction :: operator != (CFraction &c1)
{
CFraction c2, c3;
c2.nume = nume * c1.deno;
c3.nume = c1.nume * deno;
if((c2.nume > c3.nume) || (c2.nume < c3.nume))return true;
else return false;
}

void main()
{
CFraction c1, c2, c3;
cin >> c1 >> c2;
cout <<"c1 = ";
c1.output1();
cout <<"c2 = ";
c2.output1();

c3 = c1 + c2;
cout << "c1 + c2 = " << c3;

c3 = c1 - c2;
cout << "c1 - c2 = " << c3;

c3 = c1 * c2;
cout << "c1 * c2 = " << c3;

c3 = c1 / c2;
cout << "c1 / c2 = " << c3;

c3 = -c1;
cout << "-c1 = " << c3;

cout << endl;

cout<<"下面比较两个分数的大小:\n";
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;
cout<<endl;

system("pause");
}



上机感言:感觉挺爽的,可以直接输入与输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  任务 c input output system