注册 登录
编程论坛 数据结构与算法

折半查询中出现的问题。 求指点!

wo叫xiao宝 发布于 2012-11-21 21:35, 369 次点击
#include<stdio.h>
#define N 7
int main()
{
    int a[N]={1,2,3,4,5,6,7};
    int low,mid,high,x;
    low=0;
    high=N-1;

    printf("please input what you want to search: ");
    scanf("%d",&x);


    while(low<=high)
    {
        mid=(low+high)/2;
        if(x>a[mid])
        {
            low=mid+1;
        }
        else if(x<a[mid])
        {
            high=mid-1;
        }
        else if(x=a[mid])
        {
            printf("%3d",mid);
            printf("\n");
            break;
        }
        else
            printf("the numble can't be found !");
   
    }

    return(-1);

}


这是我编的一个查询数组里面的数的程序,但是在输入不是该数组的数时并没有按我设定的一样输出"the numble can't be found !",要怎样该才能实现?求指点!


[ 本帖最后由 wo叫xiao宝 于 2012-11-21 22:16 编辑 ]
5 回复
#2
yuccn2012-11-22 00:40
你的代码,
         if(x>a[mid]){}
         else if(x<a[mid]){}
         else if(x=a[mid]){ }
         else
             printf("the numble can't be found !");  

如果大于 一个分支,如果小于 一个分支,如果等于,是一个分支,后面的那个else 是什么情况? 明显是逻辑错误了。
修改如下

int main()
{
    int a[N]={1,2,3,4,5,6,7};
    int low,mid,high,x;
    low=0;
    high=N-1;

    printf("please input what you want to search: ");
    scanf("%d",&x);

    int nIndex = -1;
   
    while(low<=high)
    {
        mid=(low+high)/2;
        if(x>a[mid])
        {
            low=mid+1;
        }
        else if(x<a[mid])
        {
            high=mid-1;
        }
        else // if(x=a[mid]) 这里有两个问题,1,这句判断 是多余的,2 判断if 应该用 ==
        {
            printf("%3d",mid);
            printf("\n");
            nIndex = mid;

            break;
        }   
    }

    if (mid == -1) {  
        printf("the numble can't be found !");
    }

    return mid;

}

[ 本帖最后由 yuccn 于 2012-11-22 00:43 编辑 ]
#3
wo叫xiao宝2012-11-22 12:33
试了一下,你该的程序也没有用.....
#4
newdos2012-11-22 12:50
二楼程序改一下就可以了,可能是二楼的笔误。

    if (nIndex == -1) {
        printf("the numble can't be found !");
    }
#5
yuccn2012-11-22 13:02
回复 4楼 newdos
的确写错了,大意~~~

  if (mid == -1) { // 这个地方改为 nIndex
         printf("the numble can't be found !");
     }
 
    return mid; // 这个地方改为 nIndex
 
}
 

[ 本帖最后由 yuccn 于 2012-11-22 13:04 编辑 ]
#6
wo叫xiao宝2012-11-22 18:22
ok  谢啦!
1