我是C语言的新手,正在尝试做一个我们在大学里得到的实验教程。
我们被要求做以下工作:
任务1。
巴比伦算法计算数字n的平方根如下:
一猜猜答案(你可以选择n/2作为最初的猜测)。
计算r=n/猜测
设置guess=(guess+r)/2
根据需要,返回步骤2进行尽可能多的迭代第2步和第3步越多
重复,猜测越接近n的平方根。
编写一个程序,输入n的整数,迭代巴比伦算法
五次,并将答案输出为两到两个小数位。你的回答会
对于较小的n值最为精确。
以下是我写的:
#include <stdio.h>
#include <math.h>
int n;
main(void){
printf("Enter a value for n: ");
scanf("%d",&n);
double guess = n / 2;
for (int i = 0; i < 5; i++) {
double r = n / guess;
double guess = (guess + r) / 2;
}
printf("%d",guess);
}
我哪里做错了?它会吐出荒谬的结果;例如,如果我输入“4”作为n,答案应该在“2”左右,但每次都会给出不同的巨大结果。
最佳答案
这里有一些问题。
首先,您在循环中设置了guess
的第二个实例的作用域去掉那行的double
声明所以它应该变成:
guess = (guess + r) / 2;
其次,因为
guess
是一个double
调用,所以您需要在%f
调用中使用%d
而不是printf
。printf( "%f", guess );
一旦你得到它的工作,考虑运行算法,直到达到一定的精度。
const double epsilon = 0.0001;
double guess = (double)n / 2.0;
double r = 0.0;
while( fabs(guess * guess - (double)n) > epsilon )
{
r = (double)n / guess;
guess = (guess + r) / 2.0;
}
关于c - 基本C程序,巴比伦算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961868/