c语言经典编程282例 中的问题
发表在C语言图书答疑 2013-01-21
是否精华
版块置顶:
实例025中,如果查找元素122,会显示“查找失败”;
应该将binary_search函数第4行改为while(low<=high)
对吗?
分享到:
精彩评论 2
qq764666379
学分:0 LV1
TA的每日心情
开心
2021-07-14 20:26:52
2013-01-24
沙发
#include<stdio.h>

void binary_search(int key, int a[], int n) /*自定义函数binary_search*/
{
    int low, high, mid, count = 0, count1 = 0;
    low = 0;
    high = n - 1;
    while (low <= high) /*当查找范围不为0时执行循环体语句*/
    {
        count++; /*count记录查找次数*/
        mid = (low + high) / 2; /*求出中间位置*/
        if (key < a[mid]) /*当key小于中间值*/
            high = mid - 1; /*确定左子表范围*/
        else if (key > a[mid]) /*当key大于中间值*/
            low = mid + 1; /*确定右子表范围*/
        else if (key == a[mid]) /*当key等于中间值证明查找成功*/
        {
            printf("查找成功!\n查找 %d 次!a[%d]=%d", count, mid, key);
/*输出查找次数及所查找元素在数组中的位置*/
            count1++; /*count1记录查找成功次数*/
            break;
        }
    }
    if (count1 == 0) /*判断是否查找失败*/
        printf("查找失败!"); /*查找失败输出no found*/
}

void main()
{
    int i, key, a[100], n;
    printf("请输入数组的长度:\n");
    scanf("%d", &n); /*输入数组元素个数*/
    printf("请输入数组元素:\n");
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]); /*输入有序数列到数组a中*/
    printf("请输入你想查找的元素:\n");
    scanf("%d", &key); /*输入要查找的关键字*/
    binary_search(key, a, n); /*调用自定义函数*/
printf("\n");
}
过冬的松鼠
学分:0 LV1
TA的每日心情
Q
2021-01-03 22:18:14
2013-01-25
板凳
读者朋友你好。这段代码确实存在着查找边界数值的问题,这个修改方式是正确的。
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照