| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 369 人关注过本帖
标题:折半查询中出现的问题。 求指点!
只看楼主 加入收藏
wo叫xiao宝
Rank: 1
来 自:南昌
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-18
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
折半查询中出现的问题。 求指点!
#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 编辑 ]
搜索更多相关主题的帖子: include search please 
2012-11-21 21:35
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:14 
你的代码,
         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 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-22 00:40
wo叫xiao宝
Rank: 1
来 自:南昌
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-18
收藏
得分:0 
试了一下,你该的程序也没有用.....

小白一个 !
2012-11-22 12:33
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
二楼程序改一下就可以了,可能是二楼的笔误。

    if (nIndex == -1) {
        printf("the numble can't be found !");
    }
2012-11-22 12:50
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 4楼 newdos
的确写错了,大意~~~

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

[ 本帖最后由 yuccn 于 2012-11-22 13:04 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-11-22 13:02
wo叫xiao宝
Rank: 1
来 自:南昌
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-18
收藏
得分:0 
ok  谢啦!

小白一个 !
2012-11-22 18:22
快速回复:折半查询中出现的问题。 求指点!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028803 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved