C语言构造有理数的函数 c++有理数
求高手解答,用C++设计一个有理数运算
#includeiostream
公司主营业务:网站制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出珙县免费做网站回馈大家。
using namespace std;
//numerator 分子
//denominator分母
int gcd(int m,int n) //求最大公约数函数,用于约分
{
if(n==0)return m;
return gcd(n,m%n);
}
class fraction
{
private:
int numer;
int denom;
public:
fraction(int n=0,int d=1)//带默认参数的构造函数,整数与分数的运算迎刃而解
{
numer=n;
denom=d;
}
void rev(fraction a){numer=a.denom;denom=a.numer;}//倒数
friend ostream operator(std::ostream, const fraction); //重载输出
friend istream operator(std::istream, fraction); //重载输入
friend bool operator==(const fraction, const fraction); //判断有理数是否相等,以下类似
friend bool operator(const fraction, const fraction);
friend bool operator(const fraction, const fraction);
friend bool operator=(const fraction, const fraction);
friend bool 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);
friend fraction operator /(const fraction,const fraction);
friend bool operator!=(const fraction, const fraction);
};
fraction operator +(const fraction a,const fraction b)
{
fraction p;
p.numer=a.numer*b.denom+b.numer*a.denom;
p.denom=a.denom*b.denom;
return p;
}
fraction operator -(const fraction a,const fraction b)
{
fraction p;
p.numer=a.numer*b.denom-b.numer*a.denom;
p.denom=a.denom*b.denom;
return p;
}
fraction operator *(const fraction a,const fraction b)
{
fraction p;
p.numer=a.numer*b.numer;
p.denom=a.denom*b.denom;
return p;
}
fraction operator /(const fraction a,const fraction b)
{
fraction p;
p.numer=a.numer*b.denom;
p.denom=a.denom*b.numer;
return p;
}
ostream operator(ostream output,const fraction num)
{
int a=gcd(num.numer,num.denom);
if((num.denom/a)==1)
outputnum.numer/a;
else if(num.denom/a0)
output-num.numer/a"/"-num.denom/a;
else outputnum.numer/a"/"num.denom/a;
return output;
}
istream operator(istreaminput, fraction num)
{
inputnum.numernum.denom;
return input;
}
bool operator==(const fractionnum1, const fractionnum2)
{
return (num1.numer*num2.denom)==(num2.numer*num1.denom);
}
bool operator!=(const fraction num1, const fraction num2)
{
return (num1.numer*num2.denom)!=(num2.numer*num1.denom);
}
bool operator(const fractiona, const fractionb)
{
return (a.numer*b.denom)(b.numer*a.denom);
}
bool operator(const fractiona, const fractionb)
{
return (a.numer*b.denom)(b.numer*a.denom);
}
bool operator=(const fractiona, const fractionb)
{
return (a.numer*b.denom)=(b.numer*a.denom);
}
bool operator=(const fractiona, const fractionb)
{
return (a.numer*b.denom)=(b.numer*a.denom);
}
int main()
{
fraction zrf(1,7),ssh(26,65);
fraction p;
p.rev(ssh);
cout"ssh="ssh"\n1/ssh="pendl;
cout"zrf="zrf"\nssh="ssh'\n' ;
cout"(zrf==ssh)="(zrf==ssh)"\n(zrfssh)="(zrfssh)endl ;
cout"zrf+ssh="zrf+sshendl;
cout"zrf*ssh="zrf*sshendl;
cout"ssh-zrf="ssh-zrfendl;
cout"zrf-ssh="zrf-sshendl;
cout"zrf/ssh="zrf/sshendl;
return 0;
}
c++定义一个有理数类,实现有理数的加减乘除以及化简成最简分数等,要代码。问题解决了还会加分。
//Rational.h
#ifndef RATIONAl_CLASS
#define RATIONAl_CLASS
class Rational
{
private:
int P,Q;
void Standardize(); //将有理数化为标准形式
int gcd (int m,int n); //求两个数的最大公约数
public:
Rational (int p=0, int q=1); //构造有理数分数,分子默认为0,分母默认为1
Rational (Rational r); //拷贝构造函数
Rational (double ra); //构造函数,将实数转换为标准形式的有理数
virtual ~Rational (void); //虚析构函数
void Reduce (); //将分数化为最简形式
int GetNumerator(); //取分数的分子
int GetDenominator(); //取分数的分母
Rational operator= (Rational r); //将一个有理数对象赋值给另一个对象
Rational operator= (double ra); //将一个实数赋值给一个有理数对象
Rational operator- (); //将一个有理数取反
friend double Float(Rational r); //强制转换一个有理数对象为一个实数
//以下为两个有理数对象、一个有理数对象和一个实数、一个实数和一个有理数对象
//之间的关系运算符的重载
int operator== (Rational r) const;
int operator== (double ra) const;
friend int operator== (double ra, Rational r);
int operator!= (Rational r) const;
int operator!= (double ra) const;
friend int operator!= (double ra, Rational r);
int operator (Rational r) const;
int operator (double ra) const;
friend int operator (double ra, Rational r);
int operator= (Rational r) const;
int operator= (double ra) const;
friend int operator= (double ra, Rational r);
int operator (Rational r) const;
int operator (double ra) const;
friend int operator (double ra, Rational r);
int operator= (Rational r) const;
int operator= (double ra) const;
friend int operator= (double ra, Rational r);
//以下两个有理数对象、一个有理数对象和一个实数
//之间的普通四则运算的重载
Rational operator+ (Rational r) const;
Rational operator+ (double ra) const;
void operator+= (Rational r);
void operator+= (double ra);
Rational operator- (Rational r) const;
Rational operator- (double ra) const;
void operator-= (Rational r);
void operator-= (double ra);
Rational operator* (Rational r) const;
Rational operator* (double ra) const;
void operator*= (Rational r);
void operator*= (double ra);
Rational operator/ (Rational r) const;
Rational operator/ (double ra) const;
void operator/= (Rational r);
void operator/= (double ra);
//输入输出流的重载,输出为最简形式
friend ostream operator(ostream output,Rational obj);
friend istream operator(istream input,Rational obj);
int Iegal(void) const; //判断有理数对象的值是否合法
};
//一个实数和一个有理数对象之间的四则运算重载
Rational operator+ (double ra, Rational r);
Rational operator- (double ra, Rational r);
Rational operator* (double ra, Rational r);
Rational operator/ (double ra, Rational r);
void PrintMixedNumber(Rational X); //将一个有理数对象转换为带分数形式
Rational SolveEquation(Rational a,Rational b,Rational c); //求解一般的分数方程
#endif
二、函数实现部分:
//Rational.cpp
#include iostream
using namespace std;
#include "Rational.h"
void Rational::Standardize () //将有理数化为标准形式
{
if(Q == 0)
{
cout"Error!"endl;
exit(1);
}
else
if(Q 0)
{
P= -P;
Q= -Q;
}
}
int Rational::gcd (int m,int n) //求两个数的最大公约数
{
int i,t;
if(m==0 || n==0)
{
cout"Error!"endl;
exit(1);
}
if(nm || n-m)
{
t=n;
n=m;
m=t;
}
i=m%n;
if(i!=0)
do
{
m=n;
n=i;
i=m%n;
}while(m%n!=0);
return ((n0)? n : -n);
}
Rational::Rational (int p, int q) //构造有理数分数,分子默认为0,分母默认为1
{
P=p;
Q=q;
Standardize();
}
Rational::Rational (Rational r) //拷贝构造函数
{
P=r.P;
Q=r.Q;
Standardize();
}
Rational::Rational (double ra) //构造函数,将实数转换为标准形式的有理数
{
int base=1;
while(ra-(int)ra !=0)
{
ra=ra*10;
base=base*10;
}
P=ra;
Q=base;
}
Rational::~Rational (void) //虚析构函数
{}
void Rational::Reduce () //将分数化为最简形式
{
int max=gcd(P,Q);
P= P/max;
Q= Q/max;
}
int Rational::GetNumerator() //取分数的分子
{
return P;
}
int Rational::GetDenominator() //取分数的分母
{
return Q;
}
Rational Rational::operator= (Rational r) //将一个有理数对象赋值给另一个对象
{
P=r.GetNumerator();
Q=r.GetDenominator();
return *this;
}
Rational Rational::operator= (double ra) //将一个实数赋值给一个有理数对象
{
Rational temp(ra);
*this=temp;
return *this;
}
Rational Rational::operator- () //将一个有理数取反
{
Rational temp(-GetNumerator(),GetDenominator());
return temp;
}
double Float(Rational r) //强制转换一个有理数对象为一个实数
{
return (1.0*r.GetNumerator()/r.GetDenominator());
}
//以下为两个有理数对象、一个有理数对象和一个实数、一个实数和一个有理数对象
//之间的关系运算符的重载
int Rational::operator== (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q==r_p*Q);
}
int Rational::operator== (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q==temp_p*Q);
}
int operator== (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p==temp_p);
}
int Rational::operator!= (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return !(P*r_q==r_p*Q);
}
int Rational::operator!= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return !(P*temp_q==temp_p*Q);
}
int operator!= (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return !(r_p==temp_p);
}
int Rational::operator (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_qr_p*Q);
}
int Rational::operator (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_qtemp_p*Q);
}
int operator (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_ptemp_p);
}
int Rational::operator= (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q=r_p*Q);
}
int Rational::operator= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q=temp_p*Q);
}
int operator= (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p=temp_p);
}
int Rational::operator (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_qr_p*Q);
}
int Rational::operator (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_qtemp_p*Q);
}
int operator (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_ptemp_p);
}
int Rational::operator= (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
return (P*r_q=r_p*Q);
}
int Rational::operator= (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
return (P*temp_q=temp_p*Q);
}
int operator= (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
r_p=r_p*temp_q;
temp_p=temp_p*r_q;
return (r_p=temp_p);
}
//以下为两个有理数对象、一个有理数对象和一个实数
//之间的普通四则运算的重载
Rational Rational::operator+ (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(P*r_q+r_p*Q,Q*r_q);
return obj;
}
Rational Rational::operator+ (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q+temp_p*Q,Q*temp_q);
return obj;
}
void Rational::operator+= (Rational r)
{
P=P+r.GetNumerator();
Q=Q+r.GetDenominator();
}
void Rational::operator+= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q+temp_p*Q;
Q=temp_q*Q;
}
Rational Rational::operator- (Rational r) const
{
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(P*r_q-r_p*Q,Q*r_q);
return obj;
}
Rational Rational::operator- (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q-temp_p*Q,Q*temp_q);
return obj;
}
void Rational::operator-= (Rational r)
{
P=P-r.GetNumerator();
Q=Q-r.GetDenominator();
}
void Rational::operator-= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q-temp_p*Q;
Q=temp_q*Q;
}
Rational Rational::operator* (Rational r) const
{
Rational temp(P*r.GetNumerator(), Q*r.GetDenominator());
return temp;
}
Rational Rational::operator* (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_p,Q*temp_q);
return obj;
}
void Rational::operator*= (Rational r)
{
P=P*r.GetNumerator();
Q=Q*r.GetDenominator();
}
void Rational::operator*= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_p;
Q=temp_q*Q;
}
Rational Rational::operator/ (Rational r) const
{
Rational temp(P*r.GetDenominator(),Q*r.GetNumerator());
return temp;
}
Rational Rational::operator/ (double ra) const
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
Rational obj(P*temp_q,Q*temp_p);
return obj;
}
void Rational::operator/= (Rational r)
{
P=P*r.GetDenominator();
Q=Q*r.GetNumerator();
}
void Rational::operator/= (double ra)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
P=P*temp_q;
Q=temp_p*Q;
}
//输入输出流的重载,输出为最简形式
ostream operator(ostream output,Rational obj)
{
obj.Reduce();
outputobj.GetNumerator();
output"/"obj.GetDenominator();
return output;
}
istream operator(istream input,Rational obj)
{
int num,den;
char oper;
inputnum;
inputoper;
inputden;
Rational temp(num,den);
obj=temp;
return input;
}
int Rational::Iegal(void) const //判断有理数对象的值是否合法
{
if(Q==0)
return 0;
else
return 1;
}
//一个实数和一个有理数对象之间的四则运算重载
Rational operator+ (double ra, Rational r)
{
Rational temp(ra);
temp=temp+r;
return temp;
}
Rational operator- (double ra, Rational r)
{
Rational temp(ra);
temp=temp-r;
return temp;
}
Rational operator* (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(temp_p*r_p,r_q*temp_q);
return obj;
}
Rational operator/ (double ra, Rational r)
{
Rational temp(ra);
int temp_p=temp.GetNumerator(), temp_q=temp.GetDenominator();
int r_p=r.GetNumerator(), r_q=r.GetDenominator();
Rational obj(temp_p*r_q,r_p*temp_q);
return obj;
}
void PrintMixedNumber(Rational X) //将一个有理数对象转换为带分数形式
{
int t;
X.Reduce();
t=X.GetNumerator()/X.GetDenominator();
coutt"("(X.GetNumerator()-t*X.GetDenominator())"/"X.GetDenominator()")"endl;
}
Rational SolveEquation(Rational a,Rational b,Rational c) //求解一般的分数方程
{
Rational temp;
if(a.GetNumerator()==0)
{
cout"Error!"endl;
exit(1);
}
temp=(c-b)/a;
temp.Reduce();
return temp;
}
三、主函数(测试部分):
#include iostream
using namespace std;
#include "Rational.h"
void main()
{
Rational A(-4,-8),C,D;
Rational B(10.05);
Rational E(B);
cout"Please input C: ";
cinC;
D=43.9;
cout"A = "Aendl;
cout"B = "Bendl;
cout"E = "Eendl;
cout"B = E ? "(B==E)endl;
cout"A != B ? "(A!=B)endl;
cout"-B = "(-B)endl;
cout"D(43.9) = "Dendl;
cout"A+B = "(A+B)endl;
cout"A-B = "(A-B)endl;
cout"A+1.5 = "(A+1.5)endl;
cout"1.5+A = "(1.5+A)endl;
cout"A*1.5 = "(A*1.5)endl;
cout"1.5*A = "(1.5*A)endl;
cout"A/B = "(A/B)endl;
cout"A/1.5 = "(A/1.5)endl;
cout"1.5/A = "(1.5/A)endl;
A*=1.5;
cout"A*=1.5 = "Aendl;
cout"float(A) = "Float(A)endl;
cout"E 的带分数形式为: ";
PrintMixedNumber(E);
Rational X;
cout"A*X+B=C 解得: ";
X=SolveEquation(A,C,E);
cout"X = "Xendl;
}
C++编程题 定义一个有理数类。
1 有理数类
class Fraction
{
private:
int _Numerator; //分子
int _Denominator; //分母
public:
Fraction(){}
Fraction(const int Numerator,const int Denominator);
friend Fraction operator+(const Fraction frac1,const Fraction frac2);
friend Fraction operator-(const Fraction frac1,const Fraction frac2);
friend Fraction operator*(const Fraction frac1,const Fraction frac2);
friend Fraction operator/(const Fraction frac1,const Fraction frac2);
bool operator(const Fraction frac);
bool operator(const Fraction frac);
bool operator==(const Fraction frac);
bool operator!=(const Fraction frac);
void simp();
friend ostream operator(ostream out,Fraction frac);
};
2 包含类
class A
{
class B // B类属于A类的成员
{
//成员
};
//A类的其他成员
};
3 派生类
class A
{
};
//Book是从PrintedDocument中派生的
class B:A
{
//成员表
};
希望对你有所帮助!
c语言中有理数怎么表示
结构体定义有理数及其操作
#includeiostreamusing namespace std;struct RationalT { // 有理数类型的定义 int num; // 分子 int den; // 分母};RationalT CreateRational(int num, int den) // 创建一个有理数{ RationalT r; r.num = num; r.den = den; return r;}RationalT AddRational(RationalT r1, RationalT r2) // 有理数加法{ RationalT r; int fac; r.num = r1.num * r2.den + r2.num * r1.den; r.den = r1.den * r2.den; fac = r.num r.den ? r.num : r.den; // 将结果化成最简分式 while (r.num % fac != 0 || r.den % fac != 0) -- fac; r.num /= fac; r.den /= fac; return r;}RationalT MultiplyRational(RationalT r1, RationalT r2) // 有理数乘法{ RationalT r; int fac; r.num = r1.num * r2.num; r.den = r1.den * r2.den; fac = r.num r.den ? r.num : r.den; // 将结果化成最简分式 while (r.num % fac != 0 || r.den % fac != 0) -- fac; r.num /= fac; r.den /= fac; return r;}double GetRational(RationalT r) // 将有理数转换成小数{ return double(r.num) / r.den;}void PrintRational(RationalT r) // 以分数形式输出有理数{ cout r.num "/" r.den endl;}void main(){ struct RationalT r1,r2,r3,r4; r1 = CreateRational(2,3); r2 = CreateRational(3,8); r3 = AddRational(r1,r2); r4 = MultiplyRational(r1,r2); PrintRational(r3); PrintRational(r4); coutGetRational(r4)endl; cin.get();cin.get();}/*25/241/40.25*/
网页名称:C语言构造有理数的函数 c++有理数
标题路径:http://scyanting.com/article/dosecec.html