/*
√2 ≈ 1.4142
√3 ≈ 1.7321
√4 ≈ 2.0000
√5 ≈ 2.2361
√6 ≈ 2.4495
√7 ≈ 2.6458
√8 ≈ 2.8284
√9 ≈ 3.0000
√10 ≈ 3.1623
√11 ≈ 3.3166
√12 ≈ 3.4641
√13 ≈ 3.6056
√14 ≈ 3.7417
√15 ≈ 3.8730
√16 ≈ 4.0000
√17 ≈ 4.1231
√18 ≈ 4.2426
Press any key to continue
*/
#include
#include
double Square_root(double dnum) {
double xo = 1.0,xl;
double EPS = 1E-6;
if(dnum < 0.0) dnum = -dnum;
while(fabs(xl * xl - dnum) > EPS) {
xl = (xo + dnum/xo)/2.0;
xo = xl;
}
return xl;
}
int main() {
double dnum;
for(dnum = 2.0; dnum <= 18.0; ++dnum)
printf("√%.0lf ≈ %.4lf\n",dnum,Square_root(dnum));
return 0;
}
x0=x1是用x0暂存x1在第n-1次迭代时的值,用于后面计算第n次迭代与n-1此迭代的差值,如果差值满足fabs(x0-x1)>1e-5,迭代结束.即,求出x1的近似值!
public double 平方根(double a) //建立个函数用迭代法来算平方根
{double x0=1; //迭代的x0从1开始
int n=1; //计算迭代次数用
while(a!=1/(2*(x0+n/x0))) //判断x0是否为a的平方根
{
n++; //不是则继续迭代并且迭代次数+1
x0=1/(2*(x0+n/x0); //将迭代结果累积
}
return x0; //返回平方根的值
}
经测试不能用请等待别人答案吧