牛骨文教育服务平台(让学习变的简单)
博文笔记
  • 当前位置:
  • 牛骨文教育服务平台
  • >
  • 博文笔记
  • >
  • 习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

创建时间:2017-09-01 投稿人: 浏览次数:7607

C程序设计 (第四版) 谭浩强 习题6.9 个人设计

习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

代码块

方法1:

#include <stdio.h>
int main()
{
    int a[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6};
    int x, low, high, mid, n;
    n = 15;
    low = 0;
    high = n - 1;
    scanf("%d", &x);
    while (low <= high){
        mid = (low + high) / 2;
        if (x > a[mid])
            high = mid - 1;
        else if (x < a[mid])
            low = mid + 1;
        else if (x == a[mid]){
            printf("%d is %dth number!
", x, mid+1);
            break;
        }
    }
    if (x != a[mid])
        printf("No match!
");
    return 0;
}

方法2:

#include <stdio.h>
int main()
{
    int n[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6};
    int num, low, high, mid;
    for (low=0, high=14, printf("Please enter number: "), scanf("%d", &num); low<=high;){
        mid=(low+high)/2;
        if (num>n[mid]) high=mid-1;
        else if (num<n[mid]) low=mid+1;
        else{
            printf("%d is No.%d number!
", num, mid+1);
            break;
        }
    }
    if (num!=n[mid]) printf("No match!
");
    return 0;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。