C++程序
本帖最后由 乔宽 于 2019-9-26 17:22 编辑/*
12.用于计算数字n的平方根的巴比伦算法如下:
1) 先猜一个答案guess(可以将n/2作为第一个答案)
2)计算r = n/guess
3)令guess= (guess + r)/ 2
4)如有必要返回第2步重复多次。 步骤2和步骤3的重复次数越多,guess就越接近n的平方根。
写一个程序,输入整数作为n的值,重复执行巴比伦算法,直到guess与前一个guess的误差在1%范围内,将答案作为一个double输出
*/
#include <iostream>
using namespace std;
int main()
{
char is_continue;//判断程序是否继续运行
double n;
double answer1;
double answer2;
double guess;
double r;
int count = 0;
do
{
cout << "输入要计算平方根的数:" << endl;
cin >> n;
guess = n/2;
do
{
answer1 = guess;
r = n/guess;
guess = (guess + r)/2;
answer2 = guess;
count++;
}while((answer1 - answer2) > ( 0.01*answer1 ));
cout << n << "平方根是" << guess << endl;
cout << "总共循环了多少" << count << "次" << endl;
cout << "继续吗(输入Y继续,输入其它字符退出) " << endl;
cin >> is_continue;
}while(is_continue == 'y'|| is_continue == 'Y');
return 0;
}
题上不是说直到guess与前一个guess的误差在1%范围内吗?那为什么是while((answer1 - answer2) > (answer1 * 0.01));而不是<。而且用 > 计算了一下答案也不对,并且<也运行不了。
本帖最后由 jackz007 于 2019-9-26 17:29 编辑
while ((answer1 - answer2) > (answer1 * 0.01)) ;
这句的逻辑是说,如果 (answer1 - answer2) > (answer1 * 0.01) 为 true,那就继续循环,而到了结束循环的时候,自然就是这个条件不成立的时候,也就是说,是满足 (answer1 - answer2) <= (answer1 * 0.01) 条件的时候。 本帖最后由 superbe 于 2019-9-29 13:17 编辑
do while是先执行循环,然后判断如果条件成立继续循环,如果不成立则结束。求平方根的算法是只要误差比规定的大,就继续循环,所以应该用>啊。
把这行加个fabs取绝对值就正确了while(fabs(answer2 - answer1) > (answer1 * 0.01));
{:5_92:} ,提交上去才发现大神已经回答过了。 {:10_243:}
页:
[1]