目录
话接上回,在介绍二分法的时候,我通过猜数字游戏让大家了解,那么现在我们就利用二分法把猜数字游戏写出来吧。
代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void youxi()
{
int b = rand();
int c = b % 100 + 1;
while (1)
{
int d = 0;
scanf("%d", &d);
if (d > c)
{
printf("大了\n");
}
else if (d < c)
{
printf("小了\n");
}
else
{
printf("猜对啦,再来一局吧!!!\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
while (1)
{
printf("********1-100的猜数字游戏*******\n");
printf("*********1.play 2.退出********\n");
printf("********************************\n");
printf("请输入-》 \n");
int a = 0;
scanf("%d", &a);
if (a == 1)
{
printf("游戏开始!!!\n");
youxi();
}
if (a == 2)
{
goto tuichu;
}
if (a != 1 && a != 2)
{
printf("输入错误\n");
}
}
tuichu:
return 0;
}
随机数
首先猜数字游戏,肯定要有一个数给我们猜,这个数得是我们预料不到的,那就是随机
这就得用到rand函数,不过rand有一个缺点,那就是每次运行的随机数是相同的,如第一次是42,3,677,56.。。。。。。。。。。。。。但是第二次也是42,3,677,56.。。。。。。。。。。。
这不是真正的随机,我们叫它伪随机数。这里我们需要用srand来解决,srand决定rand的随机数的第一个数,但是呢srand需要一个参数,srand会根据这个参数提供一个值,那么问题又来了,如果提供的值相同的话,srand所给得值也会相同,所以我们得给srand一个在不断变化的值,可是这样不就又绕回来了吗??????,,,这里我们引入一个概念: 时间戳 现在的时间减去1970年1月1日的秒数 时间是在不断变化的,所以时间戳也在不断的变化,所以时间戳符合我们的条件。
解决完随机数,剩下的对你们来说应该就是洒洒水啦,如果有不明白的可以看看我的二分法介绍文章
所用函数
Rand 生成随机数,但是每次运行生成的是同一组数 头文件《stdlib.h》
Srand 给他一个变化的值。。。。(设置生成的随机数的起点)
Time 可返回一个时间戳 头文件 《time.h》 (现在的时间减去1970年1月1日的秒数,所以是不断变化的) 参数为指针
整个工程调用一次就就行, NULL:空指针 time类型实际为ll ,给他强制转换成int类型,因为Srand 参数为int。