一、介绍
生活中我们会经常用到随机数。所谓随机数即为随机生成的数字,在生成数之前无论是人还是计算机都无法知道数是多少。随机数最重要的特性是它在产生时后面的那个数与前面的那个数毫无关系。随机数的产生是人为无法干预的。
二、思路
实现随机数的生成,我们要用到三个函数,分别是rand()函数,srand()函数和time()函数。
函数介绍:
1.rand()函数
头文件:<stdlib.h>
函数原型:int rand(void);
函数作用:返回一个伪随机数,这个随机数范围是在0~RAND_MAX之间,其中RAND_MAX依赖于编译器,大部分编译器为32767。。。
至于为什么说是伪随机数,请看下面的一段代码。
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
运行结果:
运行五次结果都是一样的,并没有起到预期的“随机”的效果,明显有问题。深入了解一下,不难发现,rand函数生成的随机数是伪随机的,并不是一个真正的随机数。进一步学习我们可以知道rand函数是对一个叫“种子”的基准值进行运算而生产的随机数。
之所以前面每次运行程序产生的随机数一样,那是因为rand函数生成随机数默认种子为1。显而易见,如果想生成真正意义上的随机数,就要让种子变化。
2.srand()函数
头文件:<stdlib.h>
函数原型:void srand(unsigned int seed);
函数作用:配合rand()函数一起使用,通过srand函数的参数seed设置rand函数的种子,对srand()函数进行如srand(1)、srand(2)这样的设置种子,让rand()返回伪随机数序列。
如果种子是一直变化的,rand函数就能生成随机数了。接下来就应该寻找一个一直变化的量。
3.time()函数
头文件:<time.h>
函数原型:time_t time (time_t* timer);
函数作用:用于获取当前系统时间的时间戳(time stamp),即自 1970 年 1 月 1 日 00:00:00 UTC 起至当前时间所经过的秒数。
在程序中我们一般是使用程序运行的时间作为种子的,因为时间时刻在发生变化。
time 函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存带回去。如果timer是NULL,就只返回这个时间的差值。
time函数返回的这个时间戳。
三、代码展示
生成随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
运行结果:
这里我们可以看到三次运行结果都不一样,随机数算是生成了。
少年易老学难成,一寸光阴不可轻。