【问题描述】
用分数形式表示的有理数类如下(C++语言描述):
class Rational{
private:
int x,y; //成员变量 x 和 y,分别存放分子和分母
public:
Rational(int a=1,int b=1); //具有默认参数的构造函数,默认值为 1
Rational Add(Rational &r); //求两个分数的和
Rational Sub(Rational &r); //求两个分数的差
Rational Mul(Rational &r); //求两个分数的积
Rational Div(Rational &r); //求两个分数的商
Rational operator+(Rational &r); //重载“+”运算符,求两个分数的和
Rational operator-(Rational &r); //重载“-”运算符,求两个分数的差
Rational operator*(Rational &r); //重载“*”运算符,求两个分数的积
Rational operator/(Rational &r); //重载“/”运算符,求两个分数的商
int Divisor(int a,int b); //求最大公约数
friend ostream& operator<<(ostream &output,Rational &r); //以 x/y 的形式输出分数
};
【基本要求】
1.成员变量 x 和 y,分别存放分子和分母, 要求分数以最简形式存放。例如:分数 2/4 应简化为 1/2。
2.定义成员函数 Add、Sub、Mul 和 Div,求两个分数的和差积商。计算结果仍以最简形式存放。
3.重载运算符“+、-、*、/”,求两个分数的和差积商。计算结果仍以最简形式存放。
4.定义友元函数,重载“<<”运算符,以 x/y 的形式输出分数。例如,有如下的主函数:
int main(){
Rational a(5,15),b(1,-2),c;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
c=a.Add(b); //c=a+b;
cout<<"a+b="<<c<<endl;
c=a.Sub(b); //c=a-b;
cout<<"a-b="<<c<<endl;
c=a.Mul(b); //c=a*b;
cout<<"a*b="<<c<<endl;
c=a.Div(b); //c=a/b;
cout<<"a/b="<<c<<endl;
}
运行结果如图 所示
#include<iostream>
#include<cmath>
using namespace std;
int fn(int a,int b);
class fraction
{
public://外部接口
fraction(int m=0,int n=0)//构造函数
{
a=m ;
b=n ;
}
friend fraction operator + ( fraction d, fraction e)//运算符 + 重载成员函数
{
return fraction(d.a*e.b+e.a*d.b,d.b*e.b);
}
friend fraction operator - ( fraction d, fraction e)//运算符 - 重载成员函数
{
return fraction(d.a*e.b-e.a*d.b,d.b*e.b);
}
friend fraction operator * ( fraction d, fraction e)//运算符 * 重载成员函数
{
return fraction(d.a*e.a,d.b*e.b);
}
friend fraction operator / ( fraction d, fraction e)//运算符 / 重载成员函数
{
return fraction(d.a*e.b,d.b*e.a);
}
void display();
private:
int a;//分子
int b;//分母
};
void fraction::display()//输出函数类外实现
{
int c;
c=fn(a,b);
a/=c;
b/=c;
if(a>0&&b<0)
{
cout<<"-"<<a<<"/"<<abs(b)<<endl;
}else if(a<0&&b<0)
{
cout<<abs(a)<<"/"<<abs(b)<<endl;
}else if(a>0&&b>0)
{
cout<<a<<"/"<<b<<endl;
}else if(a<0&&b>0)
{
cout<<a<<"/"<<b<<endl;
}
}
int fn(int a,int b)//求分子分母的公约数
{
int a3,b3,d;
a3=abs(a);
b3=abs(b);
for(d=(a3<b3?a3:b3); d>=1; d--)
if(a3%d==0&&b3%d==0)
{
break;
}
return d;
}
int main()
{
fraction a(5,15),b(1,-2),c;
cout<<"a=";
a.display();
cout<<"b=";
b.display();
c=a+b;
cout<<"a+b=";
c.display();
c=a-b;
cout<<"a-b=";
c.display();
c=a*b;
cout<<"a*b=";
c.display();
c=a/b;
cout<<"a/b=";
c.display();
getchar();
//getchar();
system("pause");
}
有任何问题可以私聊