文章结束给大家来个序程员笑话:[M]
/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作者:邱学伟
* 成完日期:2013 年 5 月 4 日
* 版本号:v1.0
* 输入描述:无
* 问题描述:分数和整型数的运算符重载“+ - * /等”
* 序程出输:
* 问题析分:
* 法算计设:略
*/
#include <iostream>
#include <cmath>
using namespace std;
class CFraction
{
private:
int nume;//子分
int deno;//分母
public:
CFraction(int nu=0,int de=1):nume(nu),deno(de){}//构造函数定义,de=1分母不能为0!
void simplify();//化简分数
void display();//展示分数
friend CFraction operator+(const CFraction &c1,const CFraction &c2);//分数之间的加减乘除,友元函数现实
friend CFraction operator-(const CFraction &c1,const CFraction &c2);
friend CFraction operator*(const CFraction &c1,const CFraction &c2);
friend CFraction operator/(const CFraction &c1,const CFraction &c2);
friend CFraction operator+(const CFraction &c,const int i);//分数和整数的加减乘除
friend CFraction operator+(const int i,const CFraction &c);
friend CFraction operator-(const CFraction &c,const int i);
friend CFraction operator-(const int i,const CFraction &c);
friend CFraction operator*(const CFraction &c,const int i);
friend CFraction operator*(const int i,const CFraction &c);
friend CFraction operator/(const CFraction &c,const int i);
friend CFraction operator/(const int i,const CFraction &c);
friend bool operator==(const CFraction &c1,const CFraction &c2);
friend bool operator!=(const CFraction &c1,const CFraction &c2);
friend bool operator<=(const CFraction &c1,const CFraction &c2);
friend bool operator>=(const CFraction &c1,const CFraction &c2);
friend bool operator>(const CFraction &c1,const CFraction &c2); //比拟小大
friend bool operator<(const CFraction &c1,const CFraction &c2);
CFraction operator+();//取正
CFraction operator-();//取反
};
//分数的化简
void CFraction::simplify()
{
int d,n,r;
d=fabs(deno);//分母 “fabs()” 的作用求浮点数x的绝对值。
n=fabs(nume);//子分
if(d<n)
{
r=d;
d=n;
n=r;
}
while(r=d%n)
{
d=n;
n=r;
}
deno=deno/n;
nume=nume/n;
//将分母转化成正数
if(deno<0)
{
deno=-deno;
nume=-nume;
}
}
//展示分数
void CFraction::display()
{
cout<<"("<<nume<<"/"<<deno<<")"<<endl;
}
//分数相加
CFraction operator+(const CFraction &c1,const CFraction &c2)
{
CFraction c;
c.nume=c1.nume*c2.deno+c2.nume*c1.deno;
c.deno=c1.deno*c2.deno;
c.simplify();
return c;
}
//分数相减
CFraction operator-(const CFraction &c1,const CFraction &c2)
{
CFraction c;
c.nume=c1.nume*c2.deno-c2.nume*c1.deno;
c.deno=c1.deno*c2.deno;
c.simplify();
return c;
}
//分数相乘
CFraction operator*(const CFraction &c1,const CFraction &c2)
{
CFraction c;
c.nume=c1.nume*c2.nume;
c.deno=c1.deno*c2.deno;
c.simplify();
return c;
}
//分数相除
CFraction operator/(const CFraction &c1,const CFraction &c2)
{
CFraction c;
c.nume=c1.nume*c2.deno;
c.deno=c1.deno*c2.nume;
c.simplify();
return c;
}
//分数和整数的加法
CFraction operator+(const CFraction &c,const int i)
{
CFraction c0;
c0.nume=c.nume+i*c.deno;
c0.deno=c.deno;
c0.simplify();
return c0;
}
CFraction operator+(const int i,const CFraction &c)
{
CFraction c0;
c0.nume=c.nume+i*c.deno;
c0.deno=c.deno;
c0.simplify();
return c0;
}
//分数和整数的减法
CFraction operator-(const CFraction &c,const int i)
{
CFraction c0;
c0.nume=c.nume-i*c.deno;
c0.deno=c.deno;
c0.simplify();
return c0;
}
CFraction operator-(const int i,const CFraction &c)
{
CFraction c0;
c0.nume=i*c.deno-c.nume;
c0.deno=c.deno;
c0.simplify();
return c0;
}
//分数和整数的乘法
CFraction operator*(const CFraction &c,const int i)
{
CFraction c0;
c0.nume=c.nume*i;
c0.deno=c.deno;
c0.simplify();
return c0;
}
CFraction operator*(const int i,const CFraction &c)
{
CFraction c0;
c0.nume=c.nume*i;
c0.deno=c.deno;
c0.simplify();
return c0;
}
//分数和整数的除法
CFraction operator/(const CFraction &c,const int i)
{
CFraction c0;
c0.nume=c.nume;
c0.deno=c.deno*i;
c0.simplify();
return c0;
}
CFraction operator/(const int i,const CFraction &c)
{
CFraction c0;
c0.nume=c.deno*i;
c0.deno=c.nume;
c0.simplify();
return c0;
}
//分数取正
CFraction CFraction::operator +()
{
return *this;
}
//分数取负号
CFraction CFraction::operator -()
{
CFraction c;
c.deno=-deno;
c.nume=-nume;
return c;
}
//比拟两个分数的小大
bool operator>(const CFraction &c1,const CFraction &c2)
{
double t1,t2;
t1=c1.nume*c2.deno;
t2=c2.nume*c1.deno;
if(t1>t2)
return true;
else
return false;
}
bool operator<(const CFraction &c1,const CFraction &c2)
{
double t1,t2;
t1=c1.nume*c2.deno;
t2=c2.nume*c1.deno;
if(t1<t2)
return true;
else
return false;
}
bool operator >=(const CFraction &c1,const CFraction &c2)
{
double t1,t2;
t1=c1.nume*c2.deno;
t2=c2.nume*c1.deno;
if(t1<t2)
return false;
else
return true;
}
bool operator <=(const CFraction &c1,const CFraction &c2)
{
double t1,t2;
t1=c1.nume*c2.deno;
t2=c2.nume*c1.deno;
if(t1>t2)
return false;
else
return true;
}
bool operator ==(const CFraction &c1,const CFraction &c2)
{
if(c1!=c2)
return false;
else
return true;
}
bool operator!=(const CFraction &c1,const CFraction &c2)
{
if(c1>c2 || c1<c2 )
return true;
else
return false;
}
int main()
{
CFraction x(1,3),y(-5,10),s;
cout<<"分数x=1/3 y=-5/10"<<endl;
s=+x+y;
cout<<"+x+y=";
s.display();
s=x-y;
cout<<"x-y=";
s.display();
s=x*y;
cout<<"x*y=";
s.display();
s=x/y;
cout<<"x/y=";
s.display();
s=-x+y;
cout<<"-x+y=";
s.display();
x.display();
if (x>y) cout<<"大于"<<endl;
if (x<y) cout<<"小于"<<endl;
if (x==y) cout<<"即是"<<endl;
y.display();
cout<<endl;
CFraction c1(5,3),c2;
//以下提议在调试环境中成完测试,
c2=c1+5;
c2=5+c1;
c2=c1-5;
c2=5-c1;
c2=c1*5;
c2=5*c1;
c2=c1/5;
c2=5/c1;
bool b;
b=(c1>2);
b=(2>c1);
return 0;
}
每日一道理
有一首诗最为动人,那就是青春;有一段人生最美丽,那就是青春;有一道风景最为亮丽,那就是青春。青春,不要说已疲惫,也许你的幻想曾被现实无情毁灭,也许你的追求毫无结果,但你应该相信,没有寒风的洗礼,哪来万紫千红的春天,没有心的耕耘,哪有累累硕果?
有一首诗最为动人,那就是青春;有一段人生最美丽,那就是青春;有一道风景最为亮丽,那就是青春。青春,不要说已疲惫,也许你的幻想曾被现实无情毁灭,也许你的追求毫无结果,但你应该相信,没有寒风的洗礼,哪来万紫千红的春天,没有心的耕耘,哪有累累硕果?
文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员。