折半查找—-在一个游戏数组中查找具体的数字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;
}