在 C 语言 中,如何生成一个随机数?
在 C 语言中,生成随机数,我们可以使用内置的 rand 函数 或者 srand 函数。同时,C 语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。
C 语言中的 rand 函数,用于生成一个介于 0 ~ RAND_MAX 之间的 整数。
int rand (void);
rand 函数返回一个介于 0 ~ RAND_MAX 之间的整数。
要使用 rand 函数,必须要引入 stdlib.h 头文件。
RAND_MAX 是在 stdlib.h
里面定义的 常量,其值为 0x7fff。
rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为 “种子”。种子和随机数之间的关系是一种正态分布。
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
用于重新生成种子。
void srand (unsigned int seed);
参数 | 描述 |
---|---|
seed | 用于重新生成的种子,一般使用当前时间。 |
要使用 srand 函数,必须要引入 stdlib.h 头文件。
seed 我们一般使用 time 函数来生成。
我们使用 rand 生成伪随机数
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("嗨客网(www.haicoder.net)\n\n");
int randNum1 = rand();
int randNum2 = rand();
int randNum3 = rand();
printf("RandNum1 = %d, RandNum2 = %d, RandNum3 = %d\n", randNum1, randNum2, randNum3);
return 0;
}
我们运行程序,控制台输出如下:
我们可以看到,我们调用了 rand 函数三次,并都将生成的结果赋值给了 int 类型 的 变量,最后,我们使用了 printf 函数打印了生成的三个随机数,我们可以看到,这三个随机数各不相同。
即,我们使用了 rand 函数生成了随机数,但我们每次运行,不管运行多少次,发现,这三个随机数的三个结果都一样。
我们使用 srand 重新生成种子,生成随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
printf("嗨客网(www.haicoder.net)\n\n");
srand((unsigned)time(NULL));
int srandNum1 = rand();
int srandNum2 = rand();
int srandNum3 = rand();
printf("SRandNum1 = %d, SRandNum2 = %d, SRandNum3 = %d\n", srandNum1, srandNum2, srandNum3);
return 0;
}
我们运行程序,控制台输出如下:
我们首先,使用 srand 函数生成了新的种子,该种子是使用 time 函数生成的,接着,我们再次使用 rand 函数生成随机数,此时,每次运行的结果都不一样。
因此,我们在生成随机数之前,最好使用 srand 重新生成以下种子。
在 C 语言中,我们生成随机数可以使用 rand 函数,但 rand 函数使用的种子是固定的,因此,我们最好,在生成之前,使用 srand 重新生成一下种子。