0puppy0
#include<stdio.h>#include<math.h>typedef double(*fun)(double xx);//函数指针 #define e 0.000001 //误差void eff(double a,double b,fun hs)//二分法{int i=0; while(fabs(hs(a)-hs(b))>e&&fabs(a-b)>e){i++; if(hs(a)*hs((b+a)/2)>0){ a=(a+b)/2; printf("迭代第%d次:\t%f\n",i,a); } else { b=(a+b)/2; printf("迭代第%d次:\t%f\n",i,b); } }}double hs1(double xx)//函数f(x)=x^3+x^2-3x-3{return xx*xx*xx+xx*xx-3*xx-3;}double hs2(double xx)//函数f(x)=lnx+x{return log(xx)+xx;}void main(){ printf("用二分法求方程x^3+x^2-3x-3=0在1.5附近的根\n"); eff(1.0,2.0,hs1); printf("用二分法求方程lnx+x在0.5附近的根\n"); eff(0.0,1.0,hs2);}