1021: C语言程序设计教程(第三版)课后习题6.11

1021: C语言程序设计教程(第三版)课后习题6.11

时间限制: 1 Sec   内存限制: 128 MB
提交: 398   解决: 292
[ IDE][ 提交][ 状态][ 讨论版]

题目描述

用迭代法求X的平方根。求平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的差的绝对值少于0.00001。输出保留3位小数

输入

X

输出

X的平方根

样例输入

4

样例输出

2.000

求平方根的迭代公式:x1=1/2*(x0+a/x0)。

算法:1.先自定一个初值x0,作为a的平方根值,在我们的程序中取a/2作为a的初值;利用迭代公式求出一个x1。此值与真正的a的平方根值相比,误差很大。

⒉把新求得的x1代入x0中,准备用此新的x0再去求出一个新的x1.

⒊利用迭代公式再求出一个新的x1的值,也就是用新的x0又求出一个新的平方根值x1,此值将更趋近于真正的平方根值。

⒋比较前后两次求得的平方根值x0和x1,如果它们的差值小于我们指定的值,即达到我们要求的精度,则认为x1就是a的平方根值,去执行步骤5;否则执行步骤2,即循环进行迭代。

迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:

⑴ 选一个方程的近似根,赋给变量x0;

⑵ 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;

⑶ 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤⑵的计算。

若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。上述算法用C程序的形式表示为:

#include 
#include
int main()
{
  float x;
  float a,b;
  scanf("%f",&x);
  b = 1.0;
  while(fabs(b-a) > 0.00001)//a的取值是随机的吗?为什么 
  {
     a = b;
     b = (a+x/a)/2;//X[n+1]=1/2(X[n]+a/X[n])迭代法 
  }
  printf("%0.3f\n",b);
  return 0;
}




你可能感兴趣的:(C语言)