在写代码之时,正确的使用循环语句,可以极大的提高我们的效率,增加代码的可读性,为别人以及自己的学习,带来极大的方便。
今天,利用C语言中的循环语句,简单的实现我们的折半查找(二分查找:在有序数组中的查找)以及猜数字游戏。
二分查找
二分查找(这个二分查找在区间内找,不一定从下标为0的地方开始),其中也可换为在整个数组中查找,只需将整个数组的元素个数传过来即可
代码如下:
#include<stdio.h>
int secondry_search(int arr[],int n ,int left,int right)
{
/*int left = 0;
int right =sz - 1;*/
while (left <= right) //在等于之时,未使其进来,所以没有进来判断
{
int mid = left + (right - left) / 2;
if (arr[mid]>n)
{
right = mid - 1;
}
else if (arr[mid] < n)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;//没找到
//表示循环结束,,return的含义便是,只要找到,则直接结束程序
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int key = 3;
int ret = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
ret = secondry_search(arr, key, 2,6);
if (ret == -1)
{
printf("没找到\n");
}
else
{
printf("%d\n", ret);
}
system("pause");
return 0;
}
猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int num = 0;
int randnum = rand()% 101;//产生0到100的数
while (1)
{
printf("请输入你猜的数字\n");
scanf("%d", &num);
if (num > randnum)
{
printf("猜大了\n");
}
else if (num < randnum)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
void menu()
{
printf("*********************\n");
printf("*** 1.play 0.exit ***\n");
printf("*********************\n");
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));//产生随机数的机器
//time函数,从当前时间点到调用函数的差值,从而产生不同的随机值
//减少程序的运行次数
do
{
menu();
printf("请选择\n");
scanf("%d", &input);
switch (input)
{
case 0:
break;
case 1:
game();
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}