当前位置: 首页 > news >正文

如何生成随机数(通过rand函数,srand函数,time函数深入讲解)

目录

1. 随机数的生成

2. srand函数

3. time函数

4. 设置随机数的范围


1. 随机数的生成

既然是猜数字游戏,那么最终的数字答案肯定是重要的,我们要如何实现这个随机数的生成呢?

在这个功能上,C语言提供了一个函数叫rand,这个函数是可以生成随机数的

函数使用方法如下

int rand(void)

就如同上面所显示的,最终出现了五个完全不同的数字,我们想要生成随机数字的目的就这样达成了,这是因为rand函数的返回值是一个随机数,这个随机数的范围就在0到RAND_MAX之间

RAND_MAX在大部分编译器上默认为32767

值得注意的是,rand函数的使用需要包含一个头文件:stdlib.h

那又有一个问题,我们如果过几分钟后再去打印,结果会不会变呢?

可以看出来,结果是与上面一样的,都是一样的数字

这是因为rand函数生成的其实是一个伪随机数,rand函数本质上是对一个叫作种子的基准值进行运算生成的随机数

真正的随机数是无法预测究竟是什么数字

2. srand函数

为了解决这个问题,C语言又提供了一个函数叫作srand函数,用来初始化随机数的生成器,刚刚我们说到rand函数是根据种子来进行运算从而生成的随机数,但我们可以通过srand函数里面的参数seed(种子)来改变种子的大小

srand函数的执行语法如下:

void srand(unsigned int seed)

只要每次种子都不一样,那么rand函数对不一样的种子进行的运算生成的数值自然而然也是不同的

3. time函数

在程序当中,我们往往使用程序运行当时系统所在的时间作为种子的,这个种子便能达到每时每刻都不同的效果了,因为时间是一直都在变化且不会重复的

time函数的原型如下:

time_t time(time_t*timer);

这里我们深入了解一下time函数的原理

time函数会返回当前的日历时间,会精确到某年某月某日某分某秒

然后计算当前时间与1970年1月1日0时0分0秒的差值,单位也就是秒

这就可以导致返回的值任何时间都是不同的

返回类型是time_t类型

time_t的类型本质上也就是32位或者64位的整型类型

time函数的参数timer如果是非NULL的指针,那么函数会将返回的差值放在timer所指向的内存中带回去(涉及部分指针内容,现在无法理解的可以等后面讲解)

那如果timer是NULL,就只返回这个时间的差值

这个时间差也就是:时间戳

值得注意的是:time函数在使用的时候需要包含头文件:time.h

那么接下来我们就用上述的三个函数来实践一下能否生成随机数

这样我们产生的随机数,就是真正的随机数了

4. 设置随机数的范围

假设我们只需要生成0到99的随机数,我们应该怎么操作呢?

十分简单

只需要写成:rand()%100即可

因为这样的输出结果,余数一定是0到99

同理如果需要0到101的随机数

只需要写成:rand()%102即可


http://www.mrgr.cn/news/3779.html

相关文章:

  • BaseCTF 高校联合新生赛Week1(web)
  • Open3D mesh 模型切片
  • 小琳AI课堂:AI(人工智能)和AIGC(AI生成内容)的关系
  • Array List集合的基本使用
  • Docker使用教程
  • 下拉表格选择器ReTableSelect组件(API)
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
  • go中的并发处理
  • wsl2 airsim wairing for connect (Windows11 UE4.27)问题解决
  • excel卓越之道笔记
  • 如何在没有密码的情况下解锁Oppo手机?5 种简单的方法
  • [Zer0pts2020]Can you guess it?1
  • 电脑硬盘坏了怎么恢复数据?
  • Secure Coding in C and C ++ (四)局部静态构造函数 虚函数
  • C#学习之路day1
  • qt
  • 【案例52】oracle进程占用CPU100%分析实战
  • 文件传送协议:FTP 的工作原理与应用
  • 设计资讯 | 微型无线双麦克风:时间胶囊风格、功能强大
  • spring定时器@Scheduled异步调用