#include
void main()
{double f(double x);/*對關(guān)于x的函數(shù)進(jìn)行聲明*/
void erfen(double a,double b,double h,double ep);/*對二分法的子程序進(jìn)行聲明*/
erfen(-10,10.0,0.100,0.00001); /*對二分法的子程序進(jìn)行調(diào)用*/
}
double f(double x)/* 定義一個(gè)關(guān)于x的函數(shù)*/
{double y;
y=2*x*x*x-4*x*x+3*x-6;/*將函數(shù)值賦給y*/
return y;} /*返回函數(shù)值*/
void erfen(double a,double b,double h,double ep)/*定義二分法的子程序*/
{double x[10],a0,b0,c0,a1,b1;/*將得到的根存放在x[]中,定義區(qū)間的端點(diǎn)為浮點(diǎn)型變量*/
int k,i,j;
k=0;/*k為循環(huán)的控制變量*/
a0=a; /*將a賦給第一個(gè)區(qū)間的起點(diǎn)*/
while(a0{for(j=0;;j++) /*循環(huán)每執(zhí)行一次,則向后移動(dòng)一個(gè)區(qū)間,區(qū)間的長度為步長*/
{b0=a0+h; /*b0為第一個(gè)區(qū)間的末端*/
if(fabs(f(a0))
a0=b0; /*指向下一個(gè)區(qū)間*/
k++; /*x的地址指向下一個(gè)*/
break;} /* 跳出循環(huán)*/
if(fabs(f(b0))
break;} /*如果b0的函數(shù)值小于給定精度,則跳出循環(huán),指向下一個(gè)區(qū)間*/
if(f(a0)*f(b0)>0)
{a0=b0;
break;} /*如果a0與b0的函數(shù)值乘積大于0,則跳出循環(huán),指向下一個(gè)區(qū)間*/
if(f(a0)*f(b0)<0)/*如果a0與b0的函數(shù)值乘積小于0,則該區(qū)間存在實(shí)根*/
{
a1=a0;b1=b0;/*使a1始終b1為區(qū)間的端點(diǎn)*/
for(i=0;;i++)
{ c0=(a1+b1)/2;/*使區(qū)間縮為一半*/
if(fabs(f(c0))
a0=b0;
k++;
break;}/* 跳出循環(huán),指向下一個(gè)區(qū)間*/
if(f(c0)*f(a1)>0)
a1=c0;/*c0不是根,使c0的值賦給左端點(diǎn)*/
else
b1=c0;}/*c0不是根,是c0的值賦給右端點(diǎn)*/
break;}/* 跳出循環(huán),指向下一個(gè)區(qū)間*/
}}
if(k!=0) /* k不等于0時(shí),輸出實(shí)根的值*/
for(i=0;i<=k-1;i++)
printf("%f,%f\n",x[i],f(x[i]));
else
printf("no root"); /*k等于0時(shí),輸出無實(shí)根*/
}