#include<stdio.h>
#include<math.h>
#define PI 3.1415926
double f(double x)
{
double y;
y=x*x*x-x-1;
return y;
} //自定义函数//
void print(int a1,int b1,double p,double q,int N)
{
int k,x;
k=0;
x=0;
double y1,y2,c,a,b;
a=a1*1.0;
b=b1*1.0;
y1=0.0;
y2=0.0;
c=0.0;
while(N--)
{
y1=f(a);
y2=f(b);
k++;
if(y1*y2>0) //判断每次的区间是否满足该方程式//
{
printf("在此函数中该区间没有值\n");
printf("k=%d\n",k);
break;
}
c=(a+b)/2.0;
if(f(c)*f(a)<0)
{
b=c;
}else if(f(c)*f(b)<0){
a=c;
}
printf("a=%lf,b=%lf,f(a)=%lf,f(b)=%lf\n",a,b,f(a),f(b));
if(f(a)-f(b)<p&&f(a)-f(b)>-p)
{
if(a-b<p&&a-b>-q)
{
printf("k=%d,x=%lf,y=%lf",k,c,f(c));
break;
}
}
}
}
int main()
{
int a1,b1,N; //N是最大二分次数,k是二分次数,a是左区间,b是右区间//
double p,q; //p是函数的误差,q是区间的误差//
printf("分别输入区间a,b,函数误差p,区间误差q,二分最大次数N\n");
scanf("%d%d%lf%lf%d",&a1,&b1,&p,&q,&N);
print(a1,b1,p,q,N);
return 0;
}
这个里面我是定义了一个函数是x的三次方-x-1求它的实根(二分法只能求实根而且只能求一个)
下面看运行结果: