0

我正在尝试学习 C++,但我正在尝试解决一个问题。基本上我需要计算一个数字的平方根。我认为我走在正确的轨道上,但是当我运行代码时,输​​入数字后什么也没有发生。在此处输入图像描述

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;
4

2 回答 2

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,而不是原始的。

该算法的实时示例。我在循环中添加了两行。

于 2013-09-10T21:53:31.760 回答
0

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

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

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

于 2013-09-10T22:08:14.640 回答