21xrx.com
2025-04-11 07:01:08 Friday
文章检索 我的文章 写文章
C++中的有理数运算学习指南
2023-07-04 02:45:52 深夜i     15     0
C++ 有理数 运算 学习 指南

有理数是数学中基本的概念之一,而在编程语言C++中,有理数的运算也是比较常见的。有理数是指可以表示为两个整数之比的数,其中分母不能为0。在C++中,有理数可以通过自定义分数类来实现。下面是一个C++中分数类的定义:

class Fraction{
private:
  int numerator, denominator; //分子,分母
public:
  Fraction(int num, int den=1); //构造函数
  Fraction(const Fraction& f); //复制构造函数
  ~Fraction(); //析构函数
  Fraction operator+(const Fraction& f) const//加法运算符
  Fraction operator-(const Fraction& f) const//减法运算符
  Fraction operator*(const Fraction& f) const//乘法运算符
  Fraction operator/(const Fraction& f) const//除法运算符
  Fraction operator-() const//取负运算符
  Fraction& operator=(const Fraction& f); //赋值运算符
  bool operator==(const Fraction& f) const//相等运算符
  bool operator!=(const Fraction& f) const//不等运算符
  bool operator<(const Fraction& f) const//小于运算符
  bool operator<=(const Fraction& f) const//小于等于运算符
  bool operator>(const Fraction& f) const//大于运算符
  bool operator>=(const Fraction& f) const//大于等于运算符
  friend ostream& operator<<(ostream& os, const Fraction& f); //输出运算符
  friend istream& operator>>(istream& is, Fraction& f); //输入运算符
};

在上面的分数类定义中,定义了一些常用的运算符号,包括加、减、乘、除等等。这些运算符可以完成有理数的基本运算,而且代码也比较简洁易懂。

另外,分数类还可以实现约分和通分操作。约分就是将分数的分子和分母同时除以它们的最大公约数,这里可以使用C++标准库提供的算法库中的gcd函数来求最大公约数。通分就是将两个分母不同的分数转化为分母相同的分数,也可以使用求最大公约数的方法实现。下面是分数类中的约分和通分的代码实现:

void Fraction::Reduct() {
  int t = gcd(numerator, denominator);
  numerator /= t;
  denominator /= t;
}
Fraction Fraction::Comm(const Fraction& f) const {
  int n = numerator * f.denominator;
  int d = denominator * f.denominator;
  Fraction comm(n, d);
  return comm;
}

最后,对于分数类的输出,可以使用友元函数来实现,这样可以更方便地将分数输出到屏幕上。下面是输出运算符的定义:

ostream& operator<<(ostream& os, const Fraction& f)  
  os << f.numerator << "/" << f.denominator;
  return os;

这样,在程序中就可以通过cout来输出分数了。

使用C++中的分数类实现有理数运算是很方便的,可以大大简化运算的代码量,提高程序的可读性和可维护性。通过学习分数类的实现方法,可以更好地掌握C++中有理数的运算,为以后的编程工作打下良好的基础。

  
  

评论区