【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

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值