【C语言】折半查找----在一个游戏数组中查找具体的数字n。

折半查找—-在一个游戏数组中查找具体的数字n。
编写int binsearch(int x,int v[],int n);
Data为要查找的数组,x为查找数据值,start为查找范围起始,end为查找范围终止。

注意:1.要进行折半其实就是(首+尾)/2,但是数组的大小未知,必须调用函数使该值已经计算好了
2.循环里面 start<=end 可以满足等于mid-1,mid+1;

#include<stdio.h>
#include<windows.h>
int binserch(int data[], int x, int start, int end);

int main()
{
    int data[] = { 1, 3, 4, 5, 6, 7, 9 };
    int x = 0;
    int start = 0;
    int end =sizeof(data)/sizeof(data[0]);
    printf("请输入要查询的数:\n");
    scanf_s("%d", &x);

    printf("数字%d在数组中的下标为值为:%d\n",x, binserch(data, x, 0, end));
    system("pause");

    return 0;
}

//定义二分查找数组
int binserch(int data[], int x, int start, int end)
{
    int mid = 0;

    if (start > end)
    {
        return -1;  //首先进行判断!
    }
    while (start <= end)
    {
         mid = (start + end) / 2;
        if (x < data[mid])
        {
            end = mid-1;  //mid-1;
        }
        else if (x>data[mid])
        {
            start = mid+1;  //mid+1;
        }
        else if (x == data[mid])
        {
            return mid;
        }
    }
    return -1;
}

这里写图片描述

2.编写一个猜数字游戏
该代码的优点:
1.可重复玩耍
2.while(1)直接开始 并且进行用户选择 data为1进行重复进入
3.使用exit(EXIT_FAILURE)直接退出 跳出了两层循环
注意:switch语句 每一个分句要加上break;否则执行下一个case语句,结果未知。

//编写一个猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

int main()
{
    int start = 1;
    while (start)
    {
        printf("请选择:\n");
        printf("*******************\n");
        printf("**** 1 开始游戏****\n");
        printf("**** 0 退出游戏****\n");
        printf("*******************\n");
        scanf_s("%d", &start);
        switch (start)
        {
        case 1:
        {
                  printf("*****游戏开始*****\n");
                  srand((unsigned)time(NULL));
                  int random = rand() % 100;
                  int input = 0;
                  while (1)
                  {
                      printf("你猜多少:\n");
                      scanf_s("%d", &input);
                      if (input > random)
                      {
                          printf("你猜大了\n");
                      }
                      else if (input < random)
                      {
                          printf("你猜小了\n");
                      }
                      else
                      {
                          printf("你猜对了!\n");
                          printf("恭喜您!\n");
                          Sleep(1000);
                          printf("\n\n");
                          break;
                      }
                  }
                  break;
        }
        case 0:
        {

                  exit(EXIT_FAILURE);

        }
        default:
        {

                   printf("选择错误\n");
                   break;
        }

        }

    }

    return 0;
}

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值