【随机数生成详解】--- C语言

对于初学者而言,自己写想一些小程序了,比如猜数字,三子棋,扫雷游戏等,但是里面有个必须得学会的点,那就是随机数该如何生成,这篇文章带你搞定它。 (当然,欢迎大佬指点!)

相关函数

1、rand()

  • 介绍

函数功能:rand()函数是产生随机数的一个随机函数。
函数返回:返回的随机数是 0 ~ RAND_MAX (32767)之间的随机整数
使用时需包含头文件 #include <stdlib.h>

但严格意义上来说它不是真正的随机值,在它里面有一个算法,调用它时就会通过种子算出一个数,但是因为该函数的默认种子是 1,就算用它得到了一个数,看似是随机的,其实再次执行程序会发现还是那个数,这就没什么意义了,于是它就被称为伪随机数

因此我们就需要srand()函数来提供随机的种子,rand就会返回随机值了。

  • 用法

获得范围为 0 ~ m-1 之间的整数:

int x = rand() % m 

获得范围为 n ~ m 之间的整数:

 int x =rand() % m) + n;
  • 示例

在这里插入图片描述

2、srand()

  • 介绍

srand函数是随机数发生器的初始化函数
通俗来说:srand()函数为rand()函数提供随机数种子,rand()就能根据其种子算出伪随机值。

  • 函数原型:
void srand(unsigned int seed)

rand()函数调用前会查看是否有srand()函数给定了种子,有则调用srand(seed)一次来初始化它的起始值。,若没有,那么就默认种子为 1

seed值就是我们自己给定的种子,但是这个种子也是不变的,导致仍然是伪随机数,如果我们想让这个种子变化该怎么办?这时候就需要=time()函数了;

  • time()函数

函数功能:获取当前的系统时间
函数返回:返回结果是一个time_t类型

函数原型:

time_t time(time_t * timer)

time_t * timer是一个指针,在这用不到,直接给NULL就行。
返回类型 time_t 是一个时间戳可以将其看作long long int,也就是一个很大的整数。时间在不断的发生变化,时间戳也就跟着变化。

  • 用法
#include <time.h>

包含头文件!

srand((unsigned int)time(NULL));

将time函数返回值转为无符号整型作为随机数种子,此时rand函数所产生的值就是真正的随机值了。

  • 示例

在这里插入图片描述

  • 注意

千万不能将srand函数写在循环里,只需要初始化一次即可。

否则不会改变,或者说如果我们两次调用srand函数设置随机数种子之间的时间间隔不超过1s,这会导致我们重置随机数种子,从而等价于使用了一个固定的随机数种子。那么这两次调用最后生成的随机数就是相同的。

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值