以C语言为例介绍随机值函数 rand() 用法

C语言 码拜 5年前 (2019-09-06) 2178次浏览 0个评论

在使用rand()产生随机数时,产生的是0~RAND_MAX,随机值函数的原理与语法大多类似,本文以C语言为例介绍随机值函数 rand() 用法。

首先,需要包含头文件:

#include <stdlib.h>

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,由于时间值每秒都不同,这个函数需要包含以下头文件:

#include <time.h>

举个栗子,先理解以下伪随机数,编译以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(1);
int i;
for (i = 0; i < 10; i++)
printf("%d, ", rand()%11);
}

运行结果

8, 9, 9, 1, 7, 5, 5, 10, 1, 0,

由于每次设置的种子 seed 都是 1,所以无论运行多少次,结果都是以上随机数,不会改变。

但是假如把 seed 换成 time(NULL),每次就不一样了,如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int i;
for (i = 0; i < 10; i++)
printf("%d, ", rand()%11);
}

结果是就变了,并且每次都不一样:

6, 3, 4, 5, 5, 9, 8, 10, 10, 4,
6, 4, 2, 4, 3, 2, 5, 1, 2, 9,

这里的 time(NULL) 的结果是一个类似于 1524655706 的数字,并且每秒都在递增 1,也就达成了 srand() 的 seed 不断变化的目的,不断生成新的随机数。

拓展
这里注意一下例子中函数 rand() 的用法,函数括号内不需要加参数,如果直接调用 rand() 的话会生成下面这样的数:

17163, 2663, 24810, 4875, 26975, 14119, 22193, 11233, 26009, 20105,

所以如果我们想要生成指定范围的随机数,就需要使用求余运算符 %,规律是:例如我们需要 0–10的随机数时,就写成 rand()%11,0–100就写成 rand()%101,就是运算符后的数字需要比需求范围极值大 1,当然这也是取余运算的原理。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明以C语言为例介绍随机值函数 rand() 用法
喜欢 (1)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!