#include <iostream.h>
#include <cmath>
#include<stdlib.h>
#include <iomanip.h>
class fraction
{
private:
int fz; //分子
int fm; //分母
void reduction();//约分
void makecommond(fraction&);//通分
public:
fraction (int a=0,int b=1) //构造函数
{
fz=a;
fm=b;
}
friend fraction operator+(const fraction &,const fraction &);
friend fraction operator-(const fraction &,const fraction &);
friend fraction operator*(const fraction &,const fraction &);
friend fraction operator/(const fraction &,const fraction &);
fraction reciprocal(); //求倒数
bool operator==(fraction);//等于运算
bool operator>(fraction);//大于运算
bool operator<(fraction); //小于运算
void display(); //显示分数
void input(); //输入
fraction count(); //分数与浮点数或整数运算
};
void fraction::reduction() //约分
{
int a,b,temp;
if(fm<0)
{
fm=-fm;
fz=-fz;
}
a=abs(fz);
b=abs(fm);
while(a%b)
{
temp=a;
a=b;
b=temp%b;
}
fz/=b;
fm/=b;
}
void fraction::makecommond(fraction& b)//通分
{
int temp;
reduction();
b.reduction();
fz*=b.fm;
b.fz*=fm;
temp=fm*b.fm;
fm=b.fm=temp;
}
fraction operator+(const fraction &a,const fraction &b)//友元加法
{
fraction temp;
temp.fz=a.fz*b.fm+b.fz*a.fm;
temp.fm=a.fm*b.fm;
return temp;
}
fraction operator-(const fraction &a,const fraction &b)//友元减法
{
fraction temp;
temp.fz=a.fz*b.fm-b.fz*a.fm;
temp.fm=a.fm*b.fm;
temp.reduction();
return temp;
}
fraction operator*(const fraction &a,const fraction &b)//友元乘法
{
fraction temp;
temp.fz=a.fz*b.fz;
temp.fm=a.fm*b.fm;
temp.reduction();
return temp;
}
fraction operator/(const fraction &a,const fraction &b)//友元除法
{
fraction temp;
if(b.fz==0)
{
cout<<"0不能作为除数"<<endl;
exit(1);
}
temp.fz=a.fz*b.fm;
temp.fm=a.fm*b.fz;
temp.reduction();
return temp;
}
fraction fraction::reciprocal()//求倒数
{
fraction temp;
temp.fz=fm;
temp.fm=fz;
temp.reduction();
return temp;
}
fraction fraction::count()//与整数或浮点数运算
{
cout<<"输入一个整数或者浮点数与分数进行运算(保留2位小数)"<<endl;;
double x=fz;
double y=fm;
double z=x/y;//存放分数值
double i; //存放输入值
double num; //存放结果
cin>>i;//i为输入量
if(z>i)//分数与输入量比较大小
{cout<<fz<<"/"<<fm<<" > "<<i<<endl;}
else if(z<i)
{cout<<fz<<"/"<<fm<<" < "<<i<<endl;}
else if(z==i)
{cout<<fz<<"/"<<fm<<" == "<<i<<endl;}
//加
num=z+i;
cout<<fz<<"/"<<fm<<" + "<<i<<" = ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<num<<endl;
//减
num=z-i;
cout<<fz<<"/"<<fm<<" - "<<i<<" = ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<num<<endl;
//乘
num=z*i;
cout<<fz<<"/"<<fm<<" * "<<i<<" = ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<num<<endl;
//除
num=z/i;
cout<<fz<<"/"<<fm<<" / "<<i<<" = ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<num<<endl;
return num;
}
bool fraction::operator==(fraction b)//比较相等
{
makecommond(b);
return(fz==b.fz);
}
bool fraction::operator>(fraction b)//比较大于
{
makecommond(b);
return(fz>b.fz);
}
bool fraction::operator<(fraction b)//比较小于
{
makecommond(b);
return(fz<b.fz);
}
void fraction::display()//打印显示
{
reduction();
cout<<"为:"<<fz<<"/"<<fm<<endl;
}
void fraction::input()//输入分数
{
while(1)
{
cout<<"输入分子和分母,与下面的整数或浮点数运算:"<<endl;
cin>>fz>>fm;
if(fm==0)
{
cout<<"分母不能为0"<<endl;
}
else
{
reduction();
return;
}
}
}
void main()
{
fraction f1(-3,-5),f2(-3,5),f3(3,-7),f4,f5(6),f7;
cout<<"f1";f1.display();
cout<<"f2";f2.display();
cout<<"f3";f3.display();
cout<<"f4";f4.display();
cout<<"f5";f5.display();
if(f1>f2)//比较
cout<<"f1>f2"<<endl;
if(f2<f3)
cout<<"f2<f3"<<endl;
if(f1==f1)
cout<<"f1==f1"<<endl;
f4=f1+f3;//加法
cout<<"f4=f1+f3=";
f4.display();
f4=f1-f2;//减法
cout<<"f4=f1-f2";
f4.display();
f4=f1*f3;//乘法
cout<<"f4=f1*f3";
f4.display();
f4=f2/f3;//除法
cout<<"f4=f2/f3";
f4.display();
f4=f2.reciprocal();//求倒数
cout<<"f4=1/f2";
f4.display();
fraction f6=f1;//复制
cout<<"复制f1得到f6";
f6.display();
f7.input();//输入
cout<<"f7";
f7.display();
f4=f7.count();//分数与整数或浮点数计算
}
C++2021_Ex4_.rar
需积分: 1 20 浏览量
2021-11-19
01:04:13
上传
评论
收藏 398KB RAR 举报
YJLYang
- 粉丝: 1
- 资源: 1
评论0