#include
#include
void main()
{
double
x0,x1,xm,f0,f1,fm,x2,x3;//x2,x3是驻点,x0,x1,xm,f0,x1是二分法求根的工具。
double a[3],r[3];
int i,j=0;
printf("input 3 coefficients:\n");
for(i=0;i<3;i++)
{
printf("a[%d]=",i);
scanf("%lf",a+i);
}
printf("the function is:\n");
printf("x*x*x+%5.2f*x*x+%5.2f*x+%5.2f=0\n",a[0],a[1],a[2]);
//y=3*x*x+2*a[0]*x+a[1]
if(4*a[0]*a[0]-12*a[1]<0)//方程单调递增,与横轴只有一个交点。
{
printf("input 2 numbers as your will:\n");
printf("x0=");
scanf("%lf",&x0);
printf("x1=");
scanf("%lf",&x1);
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=x1*x1*x1+a[0]*x1*x1+a[1]*x1+a[2];
if(f0*f1==0)
{
if(f0==0)
{
xm=x0;
printf("the only root of the function is %.2f\n",xm);
}
else
{
xm=x1;
printf("the only root of the function is %.2f\n",xm);
}
if(fabs(xm*xm*xm+a[0]*xm*xm+a[1]*xm+a[2])<1e-6)
printf("comgratulations! the answer is right!\n");
else
printf("sorry, you should try again.\n");
}
else
{
while(f0*f1>=0)
{
printf("input 2 numbers again:\n");
printf("x0=");
scanf("%lf",&x0);
printf("x1=");
scanf("%lf",&x1);
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=x1*x1*x1+a[0]*x1*x1+a[1]*x1+a[2];
}
do
{
xm=(x0+x1)/2;
fm=xm*xm*xm+a[0]*xm*xm+a[1]*xm+a[2];
if(f0*fm>0)
x0=xm;
else
x1=xm;
}while(fabs(x0-x1)>1e-6);
xm=(x0+x1)/2;
printf("the only root of the function is %.2f\n",xm);
if(fabs(xm*xm*xm+a[0]*xm*xm+a[1]*xm+a[2])<1e-6)
printf("congratulations! the answer is