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

news2024/9/21 3:29:07

目录

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.coloradmin.cn/o/2064051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智算中心算力池化技术深度分析报告

智算中心算力池化技术深度分析 智能算力,人工智能基石,助力构建多要素融合信息基础设施。作为数字经济高质量发展核心引擎,智能算力基础设施建设正迎来高潮。 智算中心,作为集约化算力基础设施,以智能算力为核心&…

特征工程练手(四):特征选择

本文为和鲸python 特征工程入门与实践闯关训练营资料整理而来,加入了自己的理解(by GPT4o) 原活动链接 原作者:云中君,大厂后端研发工程师 目录 0、关卡总结1、前言2、基础知识讲解2.1get_best_model_and_accuracy2…

springboot集成kafka-生产者发送消息

springboot集成kafka发送消息 1、kafkaTemplate.send()方法1.1、springboot集成kafka发送消息Message对象消息1.2、springboot集成kafka发送ProducerRecord对象消息1.3、springboot集成kafka发送指定分区消息 2、kafkaTemplate.sendDefault()方法3、kafkaTemplate.send(...)和k…

案例-异常

题目: (如果一开始不知道如何用异常的语法写,可先用如if语句代替try...catch,最后再把if优化为try...catch) 代码: javabean类: 测试类:

Java CompletableFuture:你真的了解它吗?

文章目录 1 什么是 CompletableFuture?2 如何正确使用 CompletableFuture 对象?3 如何结合回调函数处理异步任务结果?4 如何组合并处理多个 CompletableFuture? 1 什么是 CompletableFuture? CompletableFuture 是 Ja…

springboot静态资源访问问题归纳

以下内容基于springboot 2.3.4.RELEASE 1、默认配置的springboot项目,有四个静态资源文件夹,它们是有优先级的,如下: "classpath:/META-INF/resources/", (优先级最高) "classpath:/reso…

【精选】基于Spark的国漫推荐系统(精选设计产品)

目录: 系统开发技术 Python可视化技术 Django框架 Hadoop介绍 Scrapy介绍 IDEA介绍 B/S架构 MySQL数据库介绍 系统流程分析 操作流程 添加信息流程 删除信息流程 系统系统介绍: 可以查看我的B站: 系统测试 运行环境 软件平台 硬…

docker-compose安装NebulaGraph 3.8.0

文章目录 一. 安装NebulaGraph1.1 通过 Git 克隆nebula-docker-compose仓库的3.8.0分支到主机1.2 部署1.3 卸载1.4 查看 二. 安装NebulaGraph Studio2.1 下载 Studio 的部署配置文件2.2 创建nebula-graph-studio-3.10.0目录,并将安装包解压至目录中2.3 解压后进入 n…

shaushaushau1

CVE-2023-7130 靶标介绍: College Notes Gallery 2.0 允许通过“/notes/login.php”中的参数‘user’进行 SQL 注入。利用这个问题可能会使攻击者有机会破坏应用程序,访问或修改数据. 已经告诉你在哪里存在sql注入了,一般上来应该先目录扫…

【补充篇】AUTOSAR多核OS介绍(下)

文章目录 前文回顾1 AUTOSAR OS1.1 AUTSOAR OS元素1.1.1 操作系统对象1.1.2 操作系统应用程序1.1.3 AUTOSAR OS裁剪类型1.1.4 AUTOSAR OS软件分区1.2 AUTOSAR OS自旋锁1.3 AUTOSAR OS核间通信1.4 AUTOSAR OS多核调度前文回顾 在上篇文章【补充篇】AUTOSAR多核OS介绍(上)中,…

对于一个36岁的人来说,现在转行AI大模型还来得及吗?

前言 在职场生涯中,33岁似乎是一个尴尬的年龄。许多人在这个阶段已经定型,难以寻求新的突破。然而,随着科技行业的飞速发展,人工智能成为了新时代的宠儿。那么,对于一个33岁的人来说,现在转行AI大模型还来…

做SSH实验下载 paramiko库

今天做SSH实验下载paramiko库文件一直出问题,后面库文件下好了还是报错,这里记录了我的解决方案。 pycharm修改默认下载路径为国内镜像(我这里用清华大学的镜像下载快一些) Simple Index 到这里路径就改好了,接下来就…

从就业出发,深度剖析大数据行业的现状与前景

以一个经典案例引入——啤酒与纸尿裤的故事。 20世纪90年代,沃尔玛从购物的后台信息数据中,发现很多买了纸尿裤的男士会同时买啤酒。后来,调查发现,此类人多是被“轰出来”买纸尿裤,一想到养娃压力大,心情…

牛客竞赛数据结构专题班树状数组、线段树练习题

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ G 智乃酱的平方数列(线段树,等差数列,多项式) 题目描述 想必你一定会用线段树维护等差数列吧?让我们来看看它的升级版。 请你维护一个长度为510 ^5…

Mysql高级 [Linux版] 性能优化 数据库系统配置优化 和 MySQL的执行顺序 以及 Mysql执行引擎介绍

数据库系统配置优化 1、定义 数据库是基于操作系统的,目前大多数MySQL都是安装在linux系统之上,所以对于操作系统的一些参数配置也会影响到MySQL的性能,下面就列出一些常用的系统配置。 2、优化配置参数-操作系统 优化包括操作系统的优化及My…

集运系统:如何实现不同员工的不同操作权限?

在集运行业,员工的角色和职责各有不同,因此对系统的操作权限需求也不尽相同。为了确保数据的安全性和业务的顺利进行,易境通集运系统提供了灵活的权限管理功能,让企业可以根据员工的角色和职责,设置不同的操作权限。 易…

Redis (day 3)

一、通过jedis连接数据库 1.首先导入依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.0</version></de…

mac 微信数据直接存储到移动硬盘

在apple设备上存储都是1500块/128gb的价格收取的&#xff0c;真的是寸土寸金。在手机已经占用了一遍存储空间之后&#xff0c;微信备份还要占用一遍。 iCloud备份微信聊天记录的稳定性真的非常差劲&#xff0c;比如我微信30g&#xff0c;经常恢复到20g左右就被打断&#xff0c;…

【C++ Primer Plus习题】2.6

问题: 解答: #include <iostream> using namespace std;#define LIGHT_TO_SKY 63240double lightToSky(double value) {return value * LIGHT_TO_SKY; }int main() {double light 0;cout << "请输入光年值:";cin >> light;cout << light &…

还在返回一大堆 null 字段给前端?

在许多情况下&#xff0c;返回的 JSON 数据可能包含许多 null 值的字段&#xff0c;这会导致数据冗余&#xff0c;增加网络传输的负担&#xff0c;并使得前端处理数据变得复杂。因此&#xff0c;使用 JsonInclude(JsonInclude.Include.NON_NULL) 可以帮助我们优化 JSON 的输出&…