计算平方根,但循环条件失败

时间:2013-09-10 21:50:56

标签: c++

我正在尝试学习C ++,而我正试图解决这个问题。基本上我需要计算一个数的平方根。我想我正在走上正轨,但是当我运行代码时,输​​入数字后没有任何反应。 enter image description here

int n;
    double r, intGuess, guess, ratio;

    // user input
    cout << "Enter number: ";
    cin >> n;

    intGuess = n;
    guess = n / 2;
    ratio = intGuess / guess;

    while (ratio >= 1.01 || ratio <= 0.99)
    {
        r = n / guess;
        guess = (guess + r) / 2;
    }

    cout << endl;
    cout << "The square root of " << n << " is " << guess << endl;

2 个答案:

答案 0 :(得分:4)

你的循环似乎是无限的,因为你永远不会在其中更新ratio ...如果条件是true一次,它永远是true ......

应该是这样的:

ratio = intGuess / guess;

while (ratio >= 1.01 || ratio <= 0.99)
{
    intGuess = guess;           // Save the previous value of guess
    r = n / guess;
    guess = (guess + r) / 2;
    ratio = intGuess / guess;   // Update ratio here with the previous and the
                                // actual value of guess
}

此外:

  

直到猜测在前一次猜测的1%之内

您应保存之前的guess并将其用于ratio,而不是原始版本。

此算法的

Live example。我在循环中添加了两行。

答案 1 :(得分:0)

您应该将之前的猜测与当前的猜测进行比较。那不是你在做什么。

示例:假设您输入4.第一个猜测将是2,这是确切的值。每个连续的猜测也将是2.即使您在循环内更新比率为IntGuess / guess,它也将是2. Always。

修复您的代码,以便比较之前的猜测和当前的猜测,并且一切都会很好。