一、函数介绍
1.rand()函数介绍
rand()
会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX用来指明rand()
所能返回的随机数的最大值。并没有规定 RAND_MAX的具体数值,我们在使用的时候也不太需要知道。表头文件:#include<stdlib.h>
。- 但在C语言中
rand()
函数生产的随机数并不是真正意义上的随机,所以这个随机数也被人们叫做伪随机数。至于原因呢?是因为我们在使用rand()
函数生成随机数之前需要使用随机发生器的初始化函数srand(unsigned int seed)
(下面会介绍)进行伪随机数序列初始化,seed
叫做随机种子,如果每次提供seed
值都是一样的话,那么每一轮生成的几个随机值也都是一样的。 - 若想使伪随机数变得更随机一点,我们通常会使用时间函数
time(NULL)
(下面会介绍)作为seed
,因为时间值是一直都在变化的,所以seed
也会不断变化,那么随机数则更贴近随机。
2.srand()函数介绍
srand()
函数用来设置rand()
函数产生随机数是的随机数种子。参数seed
必须是个整数,同常可以利用time(NULL)
的返回值来当做seed
。表头文件:#include<stdlib.h>
3.time()函数介绍
time()
函数的用途是返回一个值,即格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒。表头文件:#include<time.h>
。使用方式:t=time(NULL)
或者t=time(0)
。
二、算法源码
伪随机数实例:
#include<stdio.h>
#include<stdlib.h>
int main(){
srand(1);
for (int i=0;i<5;i++)
printf("%d ",rand());
printf("\n");
}
运行结果:
第一次:41 18467 6334 26500 19169
第二次:41 18467 6334 26500 19169
根据结果,我们便一目了然seed
每次都一样,则每一轮所生成的随机数也就一样。
现在我们将seed
写为time(NULL)
试试看。
time(NULL)实例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(NULL));
for (int i=0;i<5;i++)
printf("%d ",rand());
printf("\n");
}
运行结果:
第一次:8776 24793 15878 25492 25752
第二次:8852 9862 770 21893 843
结果很显然,使用time(NULL)
作为seed
,可以让随机数更加真实。
三、书写格式及随机数确定范围
rand()
函数括号内是不需要参数的,我们平时可以直接像rand()
这样书写去调用它,那么它会生成类似于上面两个实例结果的数值。但是如果我们要对rand()
函数生成的随机数做一个范围的约束,比如只允许生成0-9之间的随机数,该怎么做呢?聪明的小伙伴很快就能想到使用取余运算(%
),这样可以把比较大的数给缩小到一个范围里。格式:rand()%10
。
实例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
srand(time(NULL));
for (int i=0;i<5;i++)
printf("%d ",rand()%10);
printf("\n");
}
运算结果:
2 1 3 5 3
小伙伴,你是不是会了呢?
如果有什么问题和疑问,欢迎在评论区留言哦~
本文部分内容参考自https://knightyun.github.io/2018/04/25/c-rand-number