猜数字游戏
前言
在前两篇博客对于分支和循环语句进行了详细的介绍:
分支语句详解
循环语句详解
我们就可以写一写稍微有趣的代码了,比如:
写一个猜数字游戏
游戏要求:
- 电脑⾃动⽣成1~100的随机数
- 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束
随机数生成
要想完成猜数字游戏,⾸先得产⽣随机数,那怎么产⽣随机数呢?
rand
C语⾔提供了⼀个函数叫rand
,这函数是可以⽣成随机数的,函数原型如下所⽰:
int rand (void);
rand
函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX
之间,这个RAND_MAX
的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。
rand
函数的使⽤需要包含⼀个头⽂件是:stdlib.h
那我们就测试⼀下rand
函数,这⾥多调⽤⼏次,产⽣5个随机数:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%dn", rand());
printf("%dn", rand());
printf("%dn", rand());
printf("%dn", rand());
printf("%dn", rand());
return 0;
}
我们先运⾏⼀次,看看结果,再运⾏⼀次再看看结果,多运⾏⼏次呢?
我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次 ⼀模⼀样,这就说明有点问题。
其实rand
函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。
真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand
函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。
之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。
srand
C语⾔中⼜提供了⼀个函数叫srand
,⽤来初始化随机数的⽣成器的,srand的原型如下:
void srand (unsigned int seed);
程序中在调⽤rand
函数之前先调⽤srand
函数,通过srand
函数的参数seed
来设置rand
函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。
如果说给srand
的种⼦是rand
生成的随机数,这显然是不行的(类似先有鸡还是先有蛋的哲学问题