所以我正在使用平方根计算器而且我不知道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);
答案 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!