在猜数小游戏1的基础上加入随机数,让系统随机生成一定范围内的随机数,然后猜出这个随机数。
猜数小游戏2与1的最大不同是引入了随机数。在程序开头包含了stdlib.h和time.h头文件,分别用到了stdlib.h中的srand()和rand()函数,time.h中的time()函数。
一般来说,计算机中使用的随机数都是伪随机数,不是真正的随机数。 真正的随机数在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的。而计算机中的随机数是按照一定算法模拟产生的,其结果是确定的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以计算机产生的是伪随机数。
这里产生随机数的代码是:srand((unsigned)time(NULL)); 1+rand()%99;
有人可能会问产生随机数为什么不直接用rand()函数,为什么用到srand()函数。这里srand()函数是作为随机种子。如果没有随机种子,那么每次运行程序产生的随机数序列都是相同的,没有达到模拟随机数的效果。在没有随机种子情况下,如果我现在编程产生三个1-10之间的随机数,第一次运行之后产生的数是2、8、5,当我们第二次运行程序的时候,产生的随机数依然是2、8、5。因为计算机是根据特定的算法来计算出伪随机数的。所以我们需要srand()函数。
每次产生伪随机数之前程序会调用srand()函数,srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数 time()返回的是系统的时间(从1970.1.1零点算起),单位:秒,种子不同当然产生的随机数相同几率就很小了。
因为void srand( unsigned int seed )函数的参数是unsigned类型,所以需要作强制转换。这里time()函数的参数设为NULL,意味着函数返回值不被存储。
rand()返回0至RAND_MAX之间的随机数,经过除余运算后,rand()%99返回的是【0,98】之间的随机数,包括0和98,加1后,产生的随机数范围为【1,99】。
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int a;
int n;
srand((unsigned)time(NULL));
n=1+rand()%99;
printf("请猜一个0至100范围内的整数:");
while(1)
{
scanf("%d",&a);
printf("\n");
if(a>n)
printf("你输入的数太大了,请重新输入:");
else if(a<n)
printf("你输入的数太小了,请重新输入:");
else
{
printf("你猜对了,这个数是%d",n);
break;
}
}
}