C++高手求帮忙,编写一个求解有理数方程的题目
设计一个有理数类的头文件,以供用户求解有理分式方程,具体要求如下:1、设计有理数类Rational,利用重载技术,重新定义各运算符2、将有理数类Rational的声明与实...
设计一个有理数类的头文件,以供用户求解有理分式方程,具体要求如下:
1、 设计有理数类Rational,利用重载技术,重新定义各运算符
2、 将有理数类Rational的声明与实现分别放在文件Rational.h和Rational.cpp中;
3、 利用定义的Rational类求解有理分式方程
测试数据:解有理数方程a/bx+c/d=e/f,其中,a/b,c/d,e/f,分别为:1/2 -3/4 5/6可求解得到x=19/6,带分数的解为:3 1/6 展开
1、 设计有理数类Rational,利用重载技术,重新定义各运算符
2、 将有理数类Rational的声明与实现分别放在文件Rational.h和Rational.cpp中;
3、 利用定义的Rational类求解有理分式方程
测试数据:解有理数方程a/bx+c/d=e/f,其中,a/b,c/d,e/f,分别为:1/2 -3/4 5/6可求解得到x=19/6,带分数的解为:3 1/6 展开
展开全部
//Rational.h 文件
#ifndef _RATIONAL
#define _RATIONAL
class Rational //分数
{
int fz,fm; //分子,分母
int Gcd(); //求fz和fm的最大公约数
public:
Rational(); //无参构造函数,创建1/1对象
Rational(int pfz,int pfm=1);//pfz为分子,pfm为分母
Rational(Rational& ofs); //拷贝构造函数
void Set(int pfz,int pfm); //设置值:pfz为分子,pfm为分母
void Display(); //输出形如"x/y"的分数
void Division();//约分
//重载运算符
Rational operator+(Rational& ofs); // 重载+
Rational operator-(Rational& ofs); // 重载-
Rational operator*(Rational& ofs); // 重载*
Rational operator/(Rational& ofs); // 重载/
Rational& operator=(Rational& ofs); // 重载=
};
#endif
//Rational.cpp 文件
#include"Rational.h"
#include <iostream>
using namespace std;
int Rational::Gcd(){
int x=abs(fz),y=abs(fm),r;
r=x % y;
while( r!=0 ){
x=y; y=r; r=x % y;
}
return y;
}
Rational::Rational(){ //无参构造函数,创建1/1对象
fz=1; fm=1;
}
Rational::Rational(int pfz,int pfm){//pfz为分子,pfm为分母
fz=pfz; fm=pfm;
}
Rational::Rational(Rational& ofs){ //拷贝构造函数
fz=ofs.fz; fm=ofs.fm;
}
void Rational::Set(int pfz,int pfm){ //设置值:pfz为分子,pfm为分母
fz=pfz; fm=pfm;
Division(); //约分
}
void Rational::Display(){//输出形如"x/y"的分数
cout <<fz <<'/' <<fm;
if(fz==fm)
cout <<" = 1";
else if(fz>fm)
cout <<" = " <<fz/fm <<" " <<(fz%fm) <<"/" <<fm;
cout <<endl;
}
void Rational::Division(){//约分
int t=Gcd();
fz/=t; fm/=t;
if(fm<0) { fz=-fz; fm=-fm; } //使负号在分子上
}
Rational Rational::operator+(Rational& ofs){ //重载+
Rational t;
t.fz=fz*ofs.fm+ofs.fz*fm;
t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator-(Rational& ofs){ //重载-
Rational t;
t.fz=fz*ofs.fm-ofs.fz*fm;
t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator*(Rational& ofs){ //重载*
Rational t;
t.fz=fz*ofs.fz; t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator/(Rational& ofs){ //重载/
Rational t;
t.fz=fz*ofs.fm; t.fm=fm*ofs.fz;
t.Division(); //约分
return t;
}
Rational& Rational::operator=(Rational& ofs){
fz=ofs.fz;
fm=ofs.fm;
return *this;
}
//主文件
#include"Rational.h"
#include <iostream>
using namespace std;
void main(){
Rational f1(1,2),f2(-3,4),f3,f4;
f3.Set(5,6);
f4=(f3-f2)/f1;
f4.Display();
}
#ifndef _RATIONAL
#define _RATIONAL
class Rational //分数
{
int fz,fm; //分子,分母
int Gcd(); //求fz和fm的最大公约数
public:
Rational(); //无参构造函数,创建1/1对象
Rational(int pfz,int pfm=1);//pfz为分子,pfm为分母
Rational(Rational& ofs); //拷贝构造函数
void Set(int pfz,int pfm); //设置值:pfz为分子,pfm为分母
void Display(); //输出形如"x/y"的分数
void Division();//约分
//重载运算符
Rational operator+(Rational& ofs); // 重载+
Rational operator-(Rational& ofs); // 重载-
Rational operator*(Rational& ofs); // 重载*
Rational operator/(Rational& ofs); // 重载/
Rational& operator=(Rational& ofs); // 重载=
};
#endif
//Rational.cpp 文件
#include"Rational.h"
#include <iostream>
using namespace std;
int Rational::Gcd(){
int x=abs(fz),y=abs(fm),r;
r=x % y;
while( r!=0 ){
x=y; y=r; r=x % y;
}
return y;
}
Rational::Rational(){ //无参构造函数,创建1/1对象
fz=1; fm=1;
}
Rational::Rational(int pfz,int pfm){//pfz为分子,pfm为分母
fz=pfz; fm=pfm;
}
Rational::Rational(Rational& ofs){ //拷贝构造函数
fz=ofs.fz; fm=ofs.fm;
}
void Rational::Set(int pfz,int pfm){ //设置值:pfz为分子,pfm为分母
fz=pfz; fm=pfm;
Division(); //约分
}
void Rational::Display(){//输出形如"x/y"的分数
cout <<fz <<'/' <<fm;
if(fz==fm)
cout <<" = 1";
else if(fz>fm)
cout <<" = " <<fz/fm <<" " <<(fz%fm) <<"/" <<fm;
cout <<endl;
}
void Rational::Division(){//约分
int t=Gcd();
fz/=t; fm/=t;
if(fm<0) { fz=-fz; fm=-fm; } //使负号在分子上
}
Rational Rational::operator+(Rational& ofs){ //重载+
Rational t;
t.fz=fz*ofs.fm+ofs.fz*fm;
t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator-(Rational& ofs){ //重载-
Rational t;
t.fz=fz*ofs.fm-ofs.fz*fm;
t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator*(Rational& ofs){ //重载*
Rational t;
t.fz=fz*ofs.fz; t.fm=fm*ofs.fm;
t.Division(); //约分
return t;
}
Rational Rational::operator/(Rational& ofs){ //重载/
Rational t;
t.fz=fz*ofs.fm; t.fm=fm*ofs.fz;
t.Division(); //约分
return t;
}
Rational& Rational::operator=(Rational& ofs){
fz=ofs.fz;
fm=ofs.fm;
return *this;
}
//主文件
#include"Rational.h"
#include <iostream>
using namespace std;
void main(){
Rational f1(1,2),f2(-3,4),f3,f4;
f3.Set(5,6);
f4=(f3-f2)/f1;
f4.Display();
}
追问
Q_Q26行有一个错误不知道怎么破……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询