已知方程y=x*x*x+2*x*x-exp(x) ,请分别用二分法、牛顿法和割线法求此方程的根。误差限取:1e-12 。注意先确定出方程的有根区间。比较计算次数和计算结果。比较三种方法的计算工作量和计算结果。

小生先大概编出了算法,但唯有牛顿法可算出结果,求改错

#include "stdio.h"
#include "math.h"
void main()
{
    void function1();//二分法
    void function2();//牛顿法 
    void function3();//割线法
    int choice;
    int a;
    printf("请选择求解的方法:\n\t1.二分法\n\t2.牛顿法\n\t3.割线法\n:");
    scanf("%d",&a);
        switch(a)
    {
        case 1:    function1();break;
        case 2:    function2();break;
        case 3:    function3();break;
    }
}
 void function1()
{
float x0,x1,x2,fx0,fx1,fx2,m;
printf("请输入x1的值和x2的值:\n");
scanf("%f%f",&x1,&x2);
do

   fx1=x1*x1*x1+2*x1*x1-exp(x1);
   fx2=x2*x2*x2+2*x2*x2-exp(x2);
}
      while(fx1*fx2>0);
do
{ x0=(x1+x2)/2;
   fx0=x0*x0*x0+2*x0*x0-exp(x0);
   if((fx0*fx1)<0)
   { x2=x0;
    fx2=fx0;
   }
   else
   { x1=x0;
    fx1=fx0;
   }
   printf("%f\n",x0);
}
while(fabs(fx0)>=1e-12);
  printf("运用二分法所求结果:%f\n",x0);

}
void function2()
{     float f,df,x,x0,n=0;
printf("请输入x的值:\n");
scanf("%f",&x);
 printf("运用牛顿法所求结果:\n");
do
{ x0=x;
   f=x0*x0*x0+2*x0*x0-exp(x);
   df=3*x0*x0+4*x0-exp(x);
   x=x0-f/df;
   n++;printf("n=%f  ",n);
   printf("x=%f  x0=%f\n",x,x0);
}
     while((fabs(x-x0))>=1e-12);
  


}

 void function3()
{
       float x0,x1,fx1,fx0,x,fx,z,s;
      printf("please in put z and s:\n");
      scanf("%f%f",&z,&s);
      x0=z;
      x1=s;
       fx0=x0*x0*x0+2*x0*x0-exp(x0);
       fx1=x1*x1*x1+2*x1*x1-exp(x1);
       do
       {
       x=(x0*fx1-x1*fx0)/(fx1-fx0);
       fx=x*x*x+2*x*x-exp(x);
       if(fx*fx0>0)
       { fx0=fx;
    x0=x;
       }
       else
    x1=x;
}
while(fabs(fx)>=1e-12);
printf("运用割线法所求结果:%f\n",x);
}