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

第9周实验报告3

2012-04-17 18:15 423 查看
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 朱亚楠
* 完成日期: 日
* 版 本 号
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream>

using namespace std;

class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
int gcd(int m, int n);
public:
//构造函数及运算符重载的函数声明
CFraction(int n = 1, int d = 1){if (d == 0) return;nume = n, deno = d;}
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 &c);
bool operator < (CFraction &c);
bool operator >= (CFraction &c);
bool operator <= (CFraction &c);
bool operator == (CFraction &c);
bool operator != (CFraction &c);
void simplify();
friend ostream&operator << (ostream&, CFraction&);
friend istream&operator >> (istream&, CFraction&);
};
void CFraction::simplify()
{
int n = gcd(deno, nume);
deno /= n;     // 化简
nume /= n;
}
int CFraction::gcd(int m, int n)
{
int r;
if (m < n){r = m; m = n; n = r;}
while(r = m % n)  // 求m,n的最大公约数
{
m = n;
n = r;
}
return n;
}

CFraction operator + (CFraction &c1, CFraction &c2)
{
CFraction c;

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

c.simplify();

return c;
}
CFraction operator - (CFraction &c1, CFraction &c2)
{
CFraction c;

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

c.simplify();

return c;
}
CFraction operator * (CFraction &c1, CFraction &c2)
{
CFraction c;

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

c.simplify();

return c;
}
CFraction operator / (CFraction &c1, CFraction &c2)
{
CFraction c;

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

c.simplify();

return c;
}
CFraction operator - (CFraction &c)
{
return CFraction(-c.nume, c.deno);
}
bool CFraction::operator > (CFraction &c)
{
CFraction cf(*this / c);

if (cf.nume/cf.deno > 1)
return true;
else
return false;
}
bool CFraction::operator < (CFraction &c)
{
CFraction cf(*this / c);

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

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

if (cf.nume/cf.deno <= 1)
return true;
else
return false;
}
bool CFraction::operator == (CFraction &c)
{
CFraction cf(*this / c);

if (cf.nume/cf.deno == 1)
return true;
else
return false;
}
bool CFraction::operator != (CFraction &c)
{
CFraction cf(*this / c);

if (cf.nume/cf.deno != 1)
return true;
else
return false;
}

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

//重载函数的实现及用于测试的main()函数
void main()
{
CFraction c1, c2, c3;
cin>>c1>>c2>>c3;
cout << "c1="<<c1<<endl;
cout << "c2="<<c2<<endl;
cout << "c3="<<c3<<endl;

if (c1 > c2) cout << "c1 > c2" << endl;
if (c2 < c1) cout << "c2 < c1" << endl;
if (c2 >= c3) cout << "c2 >= c3" << endl;
if (c2 <= c3) cout << "c2 <= c3" << endl;
if (c2 == c3) cout << "c2 == c3" << endl;
if (c1 != c2) cout << "c1 != c2" << endl;

cout << "c1+c2="<<(c1 + c2)<<endl;

cout << "c1-c2="<<(c1 - c2)<<endl;

cout << "c1*c2="<<(c1 * c2)<<endl;

cout << "c1/c2="<<(c1 / c2)<<endl;

c3= -c3;
cout <<c3<<endl;

system("PAUSE");
}
终于不用拖到明天再交了,今天下午搞了半个下午。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c output input 任务 测试