想知道何时使用do while循环与while相比(例如里面)

时间:2017-10-27 00:39:02

标签: c loops

所以我正在使用平方根计算器而且我不知道while循环是否比while循环更适合。

    double x, y = 1.0, newY, squareRoot;
    bool end = true;

    printf("Enter a positve number: ");
    scanf("%lf", &x);

    //So here is the loop so which loop would be more effective and why?
    do{
        newY = x / y;
        squareRoot = (newY + y) / 2.0;

        if (fabs(y - newY) < 0.00001)
            end = false;
        else
            y = squareRoot;
    } while (end != false);

    printf("The square root is %.5f\n", y);

3 个答案:

答案 0 :(得分:1)

如果要迭代已知范围的事物,请使用_listDataHeader.size() == 1循环。如果您正在迭代并且不确定您有多少东西,但知道何时停止,请使用for循环。

在你的例子中,while循环是一个不错的选择,因为你知道你会做一些迭代次数(while,至少有一次),你知道终止条件是什么:{{ 1}}。

作为旁注,此代码假设您肯定会收敛。如果你不是很确定,你需要添加一个迭代计数,在循环内增加它,并使结束条件检查它:do...while。当然,这种情况可能是fabs(y - newY) < 0.00001条件;您不必使用while( fabs(y - newY) >= 0.00001 && iterations < SOME_LIMIT)布尔值来停止while

答案 1 :(得分:0)

do-while是一个退出控制循环,while是一个入口控制循环。

有些情况下,您希望至少在循环内执行一次语句。对于例如从用户那里获取输入,如果输入无效,则要求用户输入有效输入,否则退出循环。 do-while循环更适合这种情况。

另一方面,在进入循环之前检查while循环条件。因此,如果条件第一次为假,则while循环内的语句将不会执行。

可能存在许多复杂问题,其中迭代次数取决于某种条件并且不能预先预测,而在这些情况下循环是优选的。读取文件,你不知道文件有多大,但你知道在某个时候你会遇到文件结尾。

同样,在您的情况下,您知道循环终止条件 -

        if (fabs(y - newY) < 0.00001)
              end = false;

但您不知道事先需要多少次迭代。此外,在某些情况下,您不需要执行循环体的任何语句,例如,如果用户提供输入1

因此,while循环更适合您的情况。

答案 2 :(得分:0)

当第一次评估时中断条件为真时,您应该使用do-while,并且您仍然希望至少执行一次循环体。 E.g。

bool temp = false;

while (temp == true)
{
    printf("Hello from the while!\n");
}

do {
    printf("Hello from the do!\n");
} while (temp == true);

在这种情况下do-while将始终执行其范围至少一次的主体,其中while循环将始终评估其条件之前< / strong>运行其正文中包含的代码。

节目输出:

Hello from the do!