c++ - 如何完全减少/简化分数 (C++)

标签 c++ class struct fractions

我终其一生都无法理解为什么当我在代码中输入一个正常的分数时,我得到了无穷大的返回值。除了 GCD(最大公约数)之外的所有内容似乎都有效。

其中某处是否存在明显的逻辑错误?

我已经完成我的研究并找到了问题的各种答案,我的意思是维基百科甚至给你代码来做到这一点,但我想弄清楚如何让它按照我编码的方式工作就是现在。

#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <math.h>

using namespace std;

class Fraction
{
private:
   double num;
   double den;
   double fraction;
   double temp;
public:
   void setNum();
   void setDen();
   int getNum();
   int getDen();
   void lcdOutput();
   void decOutput();
   int gcd();
};

void Fraction::setNum(){
   cout << "Enter a value for your numerator: " << endl;
   cin >> num;
}

void Fraction::setDen(){
    cout << "Enter a value for your denominator: " << endl;
    cin >> den;
}

int Fraction::getNum(){
    return num;
 }

 int Fraction::getDen(){
     return den;
  }

int Fraction::gcd(){

    Fraction set;
    if(num > den){
       if(fmod(num, den) == 0){
          den = temp;
          return temp;
       }
       else{
          den = fmod(num, den);
          set.gcd();
       }
    }
    else{
       if(fmod(den, num) == 0){
          num = temp;
          return temp;
       }
       else{
          num = fmod(den, num);
          set.gcd();
       }
    }
 }

void Fraction::lcdOutput(){
    Fraction set;
    set.gcd();
    num = num / temp;
    den = den / temp;
    cout << "Fraction in lowest terms: " << num << "/" << den << endl;
}

void Fraction::decOutput(){
   double decimal = num / den;
   cout.precision(4);
   cout << "The fraction in decimal form is: " << decimal << endl;
}

int main(){

    Fraction set;

    set.setNum();
    set.setDen();
    set.getNum();
    set.getDen();
    set.lcdOutput();
    set.decOutput();

return 0;
}

最佳答案

这是我通过单步执行您的代码可以确定的内容。

从 main 开始,您实例化了一个名为 setFraction 类型的实例。您可以通过调用 set.setNum()set.setDen() 为其分配分子和分母。在这种情况下,对 getNum()getDen() 的调用没有任何作用,因为它们没有被分配给任何东西。

然后调用 lcdOutput(),让我们开始逐步执​​行。 您首先实例化 Fraction 的 LOCAL 实例(不确定为什么要这样做,在我看来这可能是概念上的错误),然后为该本地调用 set.gcd()实例。调用 set.gcd() 将调用该实例的方法,在我看来你真正想要的是 this->gcd() 或者只是 gcd()

您通过设置 num = num/tempden = den/temp 来跟进,但是此时 temp 仍未初始化。如果变量未初始化,它可能(而且通常是)指向垃圾。这可能解释了为什么您会返回无意义的值。

关于c++ - 如何完全减少/简化分数 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443266/

相关文章:

php - 在类中加载 config.php

c - 如何检查嵌套结构的 malloc 结果?在C中

c++ - 将类对象初始化为引用内存

c++ - C++ 中的媒体播放器

c++ - Open GL 旋转

python - 我可以使用 pybind11 将 numpy 数组传递给接受 Eigen::Tensor 的函数吗?

Java - 从不同的类调用绘制方法?

ruby - 在 Ruby 中组合 3 个并行数组的最佳和最快方法是什么

c++ - 如何创建一个 std::set 结构?

c++ - 输入一个值后跳过一些代码并退出程序