/*zstu 求一元三次方程的根 要求1附近的根,只要把x0初始化为1代入,然后牛顿迭代1000次就出结果了 */ #include<stdio.h> double c[4],d[3]; double f(double x) { double fac=1,sum=0; int i; for(i=0;i<4;i++) { sum+=fac*c[i]; fac*=x; } return sum; } double df(double x) { double fac=1,sum=0; int i; for(i=0;i<3;i++) { sum+=fac*d[i]; fac*=x; } return sum; } main() { int i; double x0; while(scanf("%lf%lf%lf%lf",&c[3],&c[2],&c[1],&c[0])!=EOF) { d[0]=c[1]; d[1]=c[2]*2; d[2]=c[3]*3; x0=1; i=1; while(i<1000) { i++; x0=x0-f(x0)/df(x0); } printf("%.2f/n",x0); } }