一、迭代公式
1.牛顿迭代法求开方的公式如下:
上述公式中,n为我们要进行开方的数,Xn需要我们给出从而进行X(n+1)的求解,不妨设Xn为n/2。(实际上Xn可以任意给一个数均可)
2.举个例子:
二、调用函数代码
1.函数返回类型我们给为double以提升精度,函数名随便起为my_sqrt,形参直接给 n 。
即:double my_sqrt(double n)
2.定义double a , b 分别代指 Xn 和 X(n+1) 。
3.由于每一次迭代都是对开方精度的提升,所以我们需要一个判断条件来退出函数,这里我采用while循环语句并且给出控制表达式为while (fabs(a - b) > 0.000001),意味a和b的绝对值之差大于0.000001。
4.循环体:从上面的例子中我们不难发现,每进行下一次迭代时,都会把上一次的X(n+1)赋值给Xn,也就是把b赋值给a,然后再进行一次迭代,由此给出循环体语句。
5.返回值为b。
所以,最终的调用函数代码如下:
double my_sqrt(double n)
{
double a = n / 2;
double b = (a + n / a) / 2;
while (fabs(a - b) > 0.000001)
{
a = b;
b = (a + n / a) / 2;
}
return b;
}
三、主函数
主函数里注意输入和输出时格式说明符应为%lf。
给出代码:
int main()
{
double n = 0;
printf("Input a number :");
scanf("%lf", &n);
double A = my_sqrt(n);
printf("Sqrt number :%lf \n", A);
return 0;
}
四、整体代码及调试结果
double my_sqrt(double n)
{
double a = n / 2;
double b = (a + n / a) / 2;
while (fabs(a - b) > 0.000001)
{
a = b;
b = (a + n / a) / 2;
}
return b;
}
int main()
{
double n = 0;
printf("Input a number :");
scanf("%lf", &n);
double A = my_sqrt(n);
printf("Sqrt number :%lf \n", A);
return 0;
}