1,问题描述:
编写用牛顿迭代法求方程根的函数。方程为ax+bx’+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。

2.问题分析:
牛顿迭代法是取x之后,在这个基础上,找到比更接近的方程的根,一步一步迭代,从而找到更接近方程根的近似根。

3.算法设计
程序流程分析:
(1)在1附近找任一实数作为x。的初值,我们取1.5,即xo=1.5。

(2)用初值代入方程中计算此时的f(x)及f'(x);程序中用变量f描述方程的值用fd描述方程求导之后的值。

(3)计算增量 h=f/fd。

(4)计算下一个x:x=x0-h。

5)用新产生的x替换原来的xo,为下一次迭代做好准备。

(6)若|x-xo|>=le-5,则转到第(3)步继续执行,否则转到步骤(7)。

(7)所求x就是方程ax3+bx2+cx+d=0的根,将其输出。

4.确定程序框架:
该程序的主体结构如下:

#include<stdio.h>

#include<math.h>

main()

{/*输入方程的系数*/

/*用牛顿迭代法求方程的根*/

/*输出所求方程的根*/

5.源代码:

 

#include<stdio.h>

#include<math.h>

int main()

{

float solution(float a,float b,float c,float d);
float a,b,c,d,x;
printf("请输入方程的系数:");
scanf("%f %f %f %f",&a,&b,&c,&d);
x=solution(a,b,c,d);
printf("所求方程根为x=%f",x);
}
float solution(float a,float b,float c,float d)
{
float x0,x=1.5,f,fd,h;
do
{
x0=x;
f=a*x0*x0*x0+b*x0*x0+c*x0+d;
fd=3*a*x0*x0+2*b*x0+c;
h=f/fd;
x=x0-h;

}
while(fabs(x-x0)>=1e-5);
return x;


}

6.流程图: