C语言二分查找

来源:百度知道 编辑:UC知道 时间:2024/06/24 05:40:15
#include<stdio.h>
#include<math.h>
main()
{
printf("方程为x*x*x-x-1=0.");
float m,n,mid;
double b,c,d;
printf("请输入区间:");
scanf("%f,%f",&m,&n);
int s=1;
b=m*m*m-m-1;
c=n*n*n-n-1;
if(b*c>0)
printf("该方程在此区间没有根!");
else if(b*c==0)
{
if(b==0)
printf("该方程根为%f\n",m);
if(c=0)
printf("该方程根为%f\n",n);
else if(b*c<0)
{
while(s!=0)
{
mid=(m+n)/2;
d=mid*mid*mid-mid-1;
if(d=0)
printf("根为%f\n",mid);
s=0;
if(d*b<0)
{
if(fabs(d-b)<=0.001)
{
printf("根为%f\n",mid);
s=0;
}
else
{

我记得二分查找是要用到递归的,
你把代码写到main函数里面而main又是不允许被其他函数调用(不能递归的)
所以....出错了,

要改的话,建议你把二分的部分单独抽取出来,写个函数(要用到递归)然后在main里面调用.

if(c=0)
if(d=0)

这都不对吧?逻辑关系我还没太仔细查,你先把这两个改了再看看。

还有个问题,浮点数不能 x==0或者x!=0 这样比较。

不一定非要递归的

能够递归的一定能化成非递归形式

只是递归对于我们来说更容易理解,更好思考

#include<stdio.h>
#include<math.h>
void main(){
float m,n,mid;
double b,c,d;
printf("方程为x*x*x-x-1=0.\n");
printf("请输入区间:");
scanf("%f %f",&m,&n);
b=m*m*m-m-1;
c=n*n*n-n-1;
if (0<b*c) printf("该方程在此区间没有根!");
else if(b*c==0){
if(b==0) printf("该方程根为%f\n",m);
if(c==0) printf("该方程根为%f\n",n);
}else if(b*c<0){
while(1){
mid=(m+n)/2;
d=mid*mid*mid-mid-1;
if(d==0){
printf("根为%f\n",mid);
break;
}
if(d*b<0){
i