迭代法求sqrt。该如何解决

迭代法求sqrt。
#include <stdio.h>
#include <math.h>
main()
{
int n;
float a,x0,x1;
n=0;
printf("输入a:");
scanf("%d",&a);
x0=a/2; // 初值
x1=(x0+a/x0)/2;  

while(fabs(x1-x0)<10e-5)
{
x0=x1;
  x1=(x0+a/x0)/2;
   
}
printf("x1=%f",x1);
}
输入a:4
输出 1
明显不对啊 还有就是x0和x1初值应该怎么赋值 啊 谢谢

------解决方案--------------------
首先,问题问的不对,容易产生误解,如果我没理解错的话,你想做的是,用平方根迭代公式求平方根,而不是用迭代法求平方根,希望楼主以后注意。

然后是代码的问题
问题1:a是float型,你在输入的时候,使用的是%d,我猜这应该不是你故意为之吧。
问题2:while循环的判断条件写错了吧,你想做的是,当fabs的值小于这个数的时候,退出循环吧,而你现在所写的代码是在fabs的值小于10e-5的时候才进入while循环。
问题3:建议楼主先去看看平方根迭代公式,然后再来实现。

希望对您有帮助
------解决方案--------------------
初始值为1;
新猜测值 = (a/猜测值+猜测值)/2;
代码修改如下:

C/C++ code

#include <stdio.h>
#include <math.h>
int main()
{
    int n;
    float a,x0,x1;
    n=0;
    printf("输入a:");
    scanf("%f",&a);                  //输入浮点数不能用%d
    x0=1; // 初值
    x1=(x0+a/x0)/2;    //猜测值

    while(fabs(x1*x1-a)>10e-5)       //超过了误差范围,则重新猜测
    {
        //x0=x1;
        x1=(x1+a/x1)/2;          //新猜测值

    }
    printf("x1=%f",x1);
}