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 的数字表示上述选择,然后判断并打印出猜拳结果。