在写代码的过程中,我们常常会生成随机数。例如三子棋中的电脑随机下棋,还有猜数字中的随机数等等。
那么我们应该如何来生成随机数呢?
在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:
int rand(void); void表示不需要参数传递
下面看一个例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = rand();
printf("%d\n",n);
return 0;}
运行结果为:41。
但是多次运行上面的代码,我们会发现每一次运行的结果都为41,这是为什么呢?随机数怎么不随机了?
其实,这是因为rand()随机生成的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布,如下图所示:
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
这里我们就要用到srand()函数来使这个种子发生变化,srand()函数的用法为:
void srand(unsigned int seed); 它的头文件为<stdlib.h>。
它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次参数的时间不同,那么生成的种子就不同,最终的随机数也就不同。
使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:
srand((unsigned)time(NULL));
那么,我们生成随机数代码就如下了:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int n=0;
srand((unsigned)time(NULL));
a = rand();
printf("%d\n", n);
return 0;
}
这样我们多次运行程序,每次产生的随机数都不一样了。
如何生成一定范围内的随机数:
int a = rand() % 10; //产生0~9的随机数
int a = rand() % 19+23; //产生23~41的随机数
更多推荐
C语言随机数生成
发布评论