c语言实现二分法(有运行截图,超级详细)

#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求它的实根(二分法只能求实根而且只能求一个)

下面看运行结果:

 


版权声明:本文为qq_59002046原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。