4. 随机数生成函数

在 C 语言标准库中可以使用 rand 函数来生成随机数。使用 rand 函数生成的随机数是通过程序运行时数据运算的到的。也称之为伪随机数

生成随机数在游戏领域、人工智能等领域非常常用。比如棋牌游戏中的洗牌就要用到随机数生成函数。

在使用 rand 函数时,程序每次第一得到的随机数都是固定的,后续也是如此。为解决这个问题,我们需要使用 srand 来设置 随机种子(算法的扰乱器),通常我们是使用时间作为随机种子,毕竟每次程序的启动时间一定不同。

头文件

stdlib.h

随机数生成相关函数

函数
说明
int rand(void);
返回一个 [0-RAND_MAX] 的随机整数。RAND_MAX 的值可能根据编译器不同而不同。
void srand(unsigned int seed);
设置随机种子来调整新的计算次序。

提示:

如果希望得到 0 ~ 100 之间的随机数可以对 rand() 的返回值求余数即可,如 rand() % 101

示例:

// filename: myrandom.c
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main(int argc, char * argv[]) {
    printf("随机数的最大值 RAND_MAX: %d\n", RAND_MAX);

    printf("第一个随机数: %d\n", rand());
    printf("第二个随机数: %d\n", rand());

    // 用当前时间来设置随机种子
    srand(time(NULL));
    printf("第三个随机数: %d\n", rand());
    return 0;
}

编译和运行结果如下:

weimingze@mzstudio:~$ gcc -o myrandom myrandom.c
weimingze@mzstudio:~$ ./myrandom
随机数的最大值 RAND_MAX: 2147483647
第一个随机数: 1804289383
第二个随机数: 846930886
第三个随机数: 1828154031
weimingze@mzstudio:~$ ./myrandom
随机数的最大值 RAND_MAX: 2147483647
第一个随机数: 1804289383
第二个随机数: 846930886
第三个随机数: 1210571382

从上述运行结果可知,重复运行时,每次前两个随机数的值都是一样的,当用时间来是设置随机种子后,第三个随机数的值就不一样了。

练习:

写一个人机对战的石头、剪刀、布猜拳游戏,其中 0 代表石头、1 代表剪刀、2 代表布。让电脑生成一个 0~2 的随机数保存在变量中,你输入一个 0~2 的数字表示上述选择,然后判断并打印出猜拳结果。