宇轩宇轩! 发表于 2020-12-24 10:22:08

习题

一组有序的数据8,9,12,18,23,34,56,78,输入一个待查找的数,如果该数存在则输出该数所在的序号,如果不存在则将该数插入到该数组中,保持数组的有序性

风过无痕1989 发表于 2020-12-24 11:00:46

// 输入一个数,查找在数组中是否有这个数,若有,这个数是数组中的第几个数,若没有则插入该数

#include<stdio.h>
int main()
{
        void find(int a[], int b, int high, int low);
        int a = { 8,9,12,18,23,34,56,78 };
        int b, high = 14, low = 0;
        printf("请输入要寻找的数:");
        scanf("%d", &b);

        find(a, b, high, low);// 用数组名作为函数的实参

}
void find(int a[], int b, int high, int low)
{
        int i, n, mid;
        n = high;
        while (low <= high)
        {
                mid = (high - low) / 2 + low;
                if (b > a)
                        low = mid + 1;
                if (b < a)
                        high = mid - 1;
                if (b == a)
                        break;      // 找到数后中断循环
        }
        if (b == a)
        {
                printf("we have the %dst number is %d\n", mid, a);

        }
        else
        {
                for (i = n;i >= mid;i--)
                        a = a;
                a = b;
                for (i = 0;i < 15;i++)
                        printf("%d ", a);
                printf("\n");
        }

}

宇轩宇轩! 发表于 2020-12-24 11:25:52

我想看看 不用函数的做法 有吗?()

风过无痕1989 发表于 2020-12-24 13:54:34

宇轩宇轩! 发表于 2020-12-24 11:25
我想看看 不用函数的做法 有吗?()

修改一下便是了。哥们,你有几个帖子还没有选最佳答案哟~~

风过无痕1989 发表于 2020-12-24 14:46:18

宇轩宇轩! 发表于 2020-12-24 11:25
我想看看 不用函数的做法 有吗?()

#include<stdio.h>
int main()
{
        int a = { 8,9,12,18,23,34,56,78 };
        int b, high = 14, low = 0;
        int i, n = 0, mid,count = 0;
        printf("请输入要寻找的数:");
        scanf("%d", &b);

        for (i = 0;i < high;i++)
        {
                if (a != 0)
                        n++;
        }
        high = n;
        n = n + 1;
        // 因为题目所给数据不足再加上 high 在运行中会不断地被修改
        while (low <= high)
        {
                mid = (high - low) / 2 + low;
                if (b > a)
                        low = mid + 1;
                if (b < a)
                        high = mid - 1;
                if (b == a)
                        break;      // 找到数后中断循环
        }
        if (b == a)
        {
                printf("we have the %dst number is %d\n", mid, a);

        }
        else
        {
                for (i = n;i >= mid;i--)
                {
                        a = a;
                }
                a = b;
                for (i = 0;i < n;i++)
                        printf("%d ", a);
                printf("\n");
        }

}
页: [1]
查看完整版本: 习题