这个似乎楼主的程序:
#include <stdio.h>
void main()
{
float x=1,a;
int k;
printf("请输入a的值:");
scanf("%f",&a);
for(k=1;k<=20;k++)
{
x=(x+a/x)*0.5;//给定公式
printf("%f\t",x);
a=x;
}
}
首先(x+a/x)*0.5>=sqrt(a);
如果此数列(x看成数列项)收敛,易知必收敛于sqrt(a);
要想收敛,若数列递减的话正好能实现,即1/2(x+a/x)>x,即x>sqrt(a),这样就能实现近似计算了。
改后程序:
#include <stdio.h>
void main()
{
float a,x;
int k;
printf("请输入a的值:");
scanf("%f",&a);
for(x=1;;x++)
if(x*x>a)
{x=x*x;
break;
}
for(k=1;k<=20;k++)
{
x=(x+a/x)*0.5;//给定公式
printf("%f\t",x);
}
}
这里找到找x的方式蛮复杂,欢迎提出更好的算法。