http://acm.zstu.edu.cn:8080/JudgeOnline/showproblem?problem_id=2462

本题用到了牛顿迭代法

牛顿迭代公式  设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式

具体代码:

View Code
#include<stdio.h>
#include<math.h>
float a, b, c, d;
float f(float x)
{
    return ((a*x+b)*x+c)*x+d;
}
float f1(float x)
{
    return (x*3*a+2*b)*x+c;
}
float root()
{
    float x0,x1=1;
    do
    {
        x0=x1;
        x1=x0-f(x0)/f1(x0);
    }while(fabs(x1-x0)>=1e-6);
    return x0;
}
int main()
{
    float x;
    while(scanf("%f%f%f%f", &a, &b, &c, &d)!=EOF)
    {
        x=root();
        printf("%.2lf\n", x);
    }
    return 0;
}