C语言随机数生成

在写代码的过程中,我们常常会生成随机数。例如三子棋中的电脑随机下棋,还有猜数字中的随机数等等。

那么我们应该如何来生成随机数呢?

在C语言中,我们一般使用 头文件中的 rand() 函数来生成随机数,它的用法为:

int rand(void);     void表示不需要参数传递

下面看一个例子:

#include

#include

int main()

{

int n = rand();

printf("%d\n",n);

return 0;}

C语言随机数生成_第1张图片

运行结果为:41。

但是多次运行上面的代码,我们会发现每一次运行的结果都为41,这是为什么呢?随机数怎么不随机了?

其实,这是因为rand()随机生成的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布,如下图所示:

C语言随机数生成_第2张图片

 种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。

这里我们就要用到srand()函数来使这个种子发生变化,srand()函数的用法为:

void srand(unsigned int seed);      它的头文件为

它需要一个 unsigned int 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次参数的时间不同,那么生成的种子就不同,最终的随机数也就不同。

使用 头文件中的 time() 函数即可得到当前的时间(精确到秒),就像下面这样:

srand((unsigned)time(NULL));

那么,我们生成随机数代码就如下了:

#include

#include

#include

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语言,开发语言,后端)