【C语言】随机数函数rand()及相关函数的介绍与使用方法

一、函数介绍

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

发布了33 篇原创文章 · 获赞 7 · 访问量 4548

猜你喜欢

转载自blog.csdn.net/qq_45239614/article/details/102879444