#include <iostream.h>
class fraction{
public:
fraction() {};
fraction (int n,int d);
fraction operator-(const fraction &Y); //分数的减法
fraction operator+(const fraction &Y); //分数的加法
fraction operator*(const fraction &Y); //分数的乘法
fraction operator/(const fraction &Y); //分数的除法
fraction operator*(int i); //分数与整数相乘
bool operator>(fraction &Y); //分数大小的比较
bool operator<(fraction &Y);
bool operator>=(fraction &Y);
bool operator<=(fraction &Y);
bool operator!=(fraction &Y);
bool operator ==(fraction &Y){
return(num==Y.num&&denom==Y.denom);
}
friend istream & operator>>(istream &input,fraction &Y); //分数的输入
friend ostream & operator<<(ostream &output,fraction &Y); //分数的输出
fraction operator++(); //加1运算
void display()
{
cout<<num<<'/'<<denom<<endl;
}
bool iszero(){
return (denom==1&&num==0);
}
bool isone(){
return (denom==1&&num==1);
}
bool isint(){return denom==1;}
int floor();
int ceding;
void reciprocal(); //倒数运算
fraction makefraction(int n,unsigned d)
{
fraction ans;
ans.num=n;
ans.denom=d;
return ans;
}
private:
int num; //分子
int denom; //分母
};
istream & operator>>(istream &input,fraction &Y) // 分数的输入 友元函数
{
cout<<"input numerator and denominator:";
input>>Y.num>>Y.denom;
return input;
}
ostream & operator<<(ostream & output,fraction &Y) //分数的输出 友元函数
{
output<<Y.num<<'/'<<Y.denom;
return output;
}
void swap(int &a, int &b) //交换函数 非成员函数
{
int c = a;
a = b;
b = c;
}
int gcd(int a, int b) //求最大公约数函数 非成员函数数
{
if(0 == a){
return b;
}
if(0 == b){
return a;
}
if(a > b){
swap(a, b);
}
int c;
for(c = a % b ; c > 0 ; c = a % b){
a = b;
b = c;
}
return b;
}
fraction::fraction(int n,int d) //分数
{
if(d==0){cout<<"fraction:denominator is 0"<<endl;}
//exit(1);
if(n==0){num=0;
denom=1;
return;
}
if (d<0)
{n=-n;
d=-d;
}
int g;
if((g=gcd(n,d))!=1) //进行约分操作
{
num=n/g;denom=d/g;
}
else {num=n;denom=d;}
}
fraction fraction::operator+(const fraction &Y) //分数的加法
{
if (num==0)
return makefraction(Y.num,Y.denom);
else if (Y.num==0) return *this;
else return (fraction(num*Y.denom+Y.num*denom,denom*Y.denom));
}
fraction fraction::operator-(const fraction &Y) //分数的减法
{
if (num==0)
return makefraction(-Y.num,Y.denom);
else if (Y.num==0) return *this ;
else return (fraction(num*Y.denom-Y.num*denom,denom*Y.denom));
}
fraction fraction::operator *(const fraction &Y) //分数的乘法
{
return (fraction(num*Y.num,denom*Y.denom));
}
fraction fraction::operator /(const fraction &Y) //分数的除法
{
return (fraction(num*Y.denom,denom*Y.num));
}
fraction fraction::operator*(int i) //分数与整数的相乘
{
return fraction(num*i,denom);
}
void fraction::reciprocal() //分数的倒数运算
{
if(num!=0)
{
int temp=num;
num=denom;
denom=temp;}
}
bool fraction::operator < (fraction &Y) //比较大小
{
return (num*Y.denom<Y.num*denom);
}
bool fraction::operator <=(fraction &Y)
{
return (num*Y.denom<=Y.num*denom) ;
}
bool fraction::operator >(fraction &Y)
{
return (num*Y.denom>Y.num*denom);
}
bool fraction::operator >=(fraction &Y)
{
return (num*Y.denom>=Y.num*denom);
}
bool fraction::operator !=(fraction &Y)
{
return (!(num==Y.num&&denom==Y.denom));
}
fraction fraction::operator++()
{
return (fraction(num+denom,denom));
}
void main()
{
fraction X(1,2);
fraction Y(3,4);
X.display();
// cout<<X.num<<"/"<<X.denom;
fraction A;
A=X+Y;
A.display();
// cout<<A.num<<"/"<<A.denom;
fraction B;
B=X-Y;
B.display();
// cout<<B.num<<"/"<<B.denom;
fraction C;
C=X*Y;
C.display();
//
fraction D;
D=X/Y;
D.display();
fraction E;
E=Y*3;
E.display();
//
fraction Z(4,5);
Z.reciprocal();
Z.display();
//
fraction G;
G=X+Y*4;
G.display();
cout<<(X<=Y)<<endl;
cout<<(X>Y)<<endl;
cout<<(X==Y)<<endl;
cout<<(X!=Y)<<endl;
fraction H(2,3);
fraction J;
J=++H;
J.display();
//
fraction F;
cin>>F;
cout<<"F="<<F<<endl;
}
用C++语言描述分数类,并进行各种运算
需积分: 35 42 浏览量
2009-05-25
20:19:33
上传
评论
收藏 233KB RAR 举报
loveylh
- 粉丝: 0
- 资源: 1
最新资源
- 计算机毕业设计-Java+access综合测评系统毕业设计(源代码+论文+开题报告+任务书)
- 计算机毕业设计-JavaSmart系统-系统框架设计与开发(源代码+论文)
- 297418564246850加工中心宏计算.apk
- 基于Python实现对书旗小说网进行逆向,实现整本书的采集源代码 并使用tkinter做了GUI界面
- 基于Python实现对塔读小说的免费内容进行整本书的采集源代码,利用JS逆向对每章节中的文字广告进行去除
- Java将2个List集合合并到一个List里面并排序工具类
- 1123231321321321
- 基于Python的歌曲搜索播放器源代码,利用requests库对歌曲宝网站进行歌曲采集,并用tkinter做了UI
- kernel-devel-3.10.0-1062.21.1.el7.x86-64.rpm
- kernel-3.10.0-1062.21.1.el7.x86-64.rpm
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈