今天朋友问我一道使用迭代法求a的平方根的题,感觉受益匪浅,与诸君相分享
首先我们来看一下题目
我们也无需了解迭代法是什么原理,根据这个题目可以分析得到,需要使用while循环,下面是我的代码实践
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
float a, b, xn,xm;//定义变量
printf("根号a的值为:>");//打印提示可不要
scanf("%f", &a);//输入a
xn = 0.1, xm = 0.11;//xn与xm可以随便赋值,只需xm - xn的绝对值满足小于0.001即可
while (abs(xn, xm) > 0.001)//循环结构
{
xm = (a / xn + xn) / 2;//迭代法的式子
b = xm;//①
xm = xn;//②
xn = b;//③
//①②③是交换xn与xm的方法
}
printf("%f\n", xm);//打印结果
}
当然有的时候我们可能会忘记求绝对值的abs()函数,那么就需要自己手写abs()了
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
float abs(float xn, float xm)
{
if (xm - xn > 0)
return (xm - xn);
else
return (xn - xm);
}
int main()
{
float a, b, xn,xm;//定义变量
printf("根号a的值为:>");//打印提示可不要
scanf("%f", &a);//输入a
xn = 0.1, xm = 0.11;//xn与xm可以随便赋值,只需xm - xn的绝对值满足小于0.001即可
while (abs(xn, xm) > 0.001)//循环结构
{
xm = (a / xn + xn) / 2;//迭代法的式子
b = xm;//①
xm = xn;//②
xn = b;//③
//①②③是交换xn与xm的方法
}
printf("%f\n", xm);//打印结果
}
以上是加上abs()的代码;