rand()函数

本文介绍了C语言中rand()和srand()函数的实现原理及使用方法,通过示例解释了如何生成指定范围内的随机数。rand()函数结合srand()函数可以提供不重复的随机数序列,srand()通常用当前时间作为种子以确保每次运行程序时的随机性。关键点包括取余运算符%的应用和time(NULL)函数获取当前时间戳。了解这些可以帮助开发者更好地在程序中引入随机性。
摘要由CSDN通过智能技术生成

大家再写程序的时候,有时会需要程序能产生一个随机数。那么rand()函数和srand()函数的组合使用,可以满足大家的需求。

注:建议先弄明白如何使用,然后再根据使用方法来理解。

一下是目录,大家自行跳转:

一、rand()函数和srand()函数的实现原理

二、rand()函数和srand()函数的使用方法

一、rand()函数和srand()函数的实现原理

1.1  源代码

       使用这两个函数是需要添加<stdlib.h>的头文件,那么在该头文件内部该函数是什么样的呢

     static unsigned long next = 1;

     /* RAND_MAX assumed to be 32767 */
    int rand(void) 
    {
        next = next * 1103515245 + 12345;
        return((unsigned)(next/65536) % 32768);
    }

    void srand(unsigned int seed) 
    {
        next = seed;
    }

1.2  了解函数执行流程

一般我们这样使用这两个函数:

srand((unsigned)time(NULL);
int num=rand()%100;

实现功能:给num赋值一个[0,99]的随机值;

大家要注意两个关键点

1、%:取余运算赋的用法:

这里我们定义一下表达式(方便表达):num=rand()%100 => 值(num) = 被取余数( rand() ) % 取余数(100)

当 被取余数的值 > 取余数时,就可以得到一个 [ 0 , 取余数值 ] 的值

例子:100%13 => 余下的值肯定是不能整除13,不会等于13,并且小于13的!

总:这就使得我们可以通过%来控制我们想要的数值的大小。

2、time(NULL)

time()其实也是一个函数,time_t time(time_t *t)使用它需要包含头文件<time.h>

函数作用:返回一个值,即格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒。

参数:time(NULL)或time(0)

 3、next = next * 1103515245 + 12345;

这段代码的目的就是为了拉大随机值之间的差距,如果不对next进行计算,那么每次产生的随机值就是随时间的流逝而递增,每过一秒加一。

示范一下:

如果不对next的值拉大差距,那么每次生成的随机数就会间距非常小,达不到随机的要求

二、rand()函数和srand()函数的使用方法

主要讲一个公式,非常好用=>产生一个[ m,n ]之间的随机值

0<=rand()%(n-m+1)<=n-m

m<=rand()%(n-m+1)+m<=n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值