C语言如何生成随机数

问题描述

C 语言 中,如何生成一个随机数?

分析

在 C 语言中,生成随机数,我们可以使用内置的 rand 函数 或者 srand 函数。同时,C 语言中还有一个 random() 函数可以获取随机数,但是 random() 不是标准函数,不能在 VC/VS 等编译器通过,所以比较少用。

rand函数详解

定义

C 语言中的 rand 函数,用于生成一个介于 0 ~ RAND_MAX 之间的 整数

语法

int rand (void);

返回值

rand 函数返回一个介于 0 ~ RAND_MAX 之间的整数。

头文件

要使用 rand 函数,必须要引入 stdlib.h 头文件。

技术细节

RAND_MAX 是在 stdlib.h 里面定义的 常量,其值为 0x7fff。

注意

rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为 “种子”。种子和随机数之间的关系是一种正态分布。

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

srand函数详解

定义

用于重新生成种子。

语法

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; }

我们运行程序,控制台输出如下:

01_c语言生成随机数.png

我们可以看到,我们调用了 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; }

我们运行程序,控制台输出如下:

02_c语言生成随机数.png

我们首先,使用 srand 函数生成了新的种子,该种子是使用 time 函数生成的,接着,我们再次使用 rand 函数生成随机数,此时,每次运行的结果都不一样。

因此,我们在生成随机数之前,最好使用 srand 重新生成以下种子。

C语言如何生成随机数总结

在 C 语言中,我们生成随机数可以使用 rand 函数,但 rand 函数使用的种子是固定的,因此,我们最好,在生成之前,使用 srand 重新生成一下种子。