随机数的实现——rand函数、srand函数和time函数

简介: 随机数的实现——rand函数、srand函数和time函数

一、rand()函数

C语⾔提供了库函数rand,可以用于生成随机数

CPlusPlus中关于该函数的介绍 →  rand - C++ 参考 (cplusplus.com)

函数原型int rand (void);

头文件:stdlib.h

返回值的范围:0~RAND_MAX(⼤部分编译器上是32767)

注意:rand()函数生成的随机值是伪随机值,其原理是根据一个“种子”按照某种算法所得,⼀次运⾏中产⽣的多个结果是相对随机的,但是程序多次运行时,结果是完全相同的

#include<stdio.h>
#include<stdlib.h>
int main()
{
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  return 0;
}

从上图运行结果可以看出,在一次程序执行多次调用时确实产生了随机数的效果,但是两次运行程序产生的随机数确实完全一样的

所以单靠rand()函数无法实现真正的随机数生成

二、srand()函数

C语⾔中提供了库函数函数srand(),⽤来初始化随机数的⽣成器

CPlusPlus中关于该函数的介绍srand - C++ Reference (cplusplus.com)

srand的原型void srand (unsigned int seed);

头文件:stdlib.h

参数: unsigned int类型的seed参数(种子)——在程序中我们⼀般是使用程序与运行的时间作为种子的,因为时间时刻在发生变化的

说明:程序中在调⽤rand()函数之前先调⽤srand()函数,通过srand()函数的参数seed来设置rand()函数⽣成随 机数的时候的种子,只要种子在变化,每次⽣成的随机数序列也就变化起来——srand函数是不需要频繁调⽤的,一次运行的程序中调用一次就可以

这里的种子需要的随机数,我们通过下面的time函数来产生

三、time()函数

C语⾔中提供了库函数time(),可以获得这个时间

CPlusPlus中关于该函数的介绍time - C++ Reference (cplusplus.com)

time函数原型time_t time (time_t* timer);

头文件: time.h

返回值:time_t类型,本质上是32位或者64位的整型类型(time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒)

注意:  time函数的参数timer,如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。 如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳

四、随机数的生成

总结——最终,我们可以先使用  srand((unsigned int)time(NULL));  ——使用time函数的返回值作为srand函数的参数,调用srand()函数就可以初始化种子

接下来,再调用rand()函数的时候得到的就是一个真正的随机值(再次声明,srand函数是不需要频繁调⽤的,一次运行的程序中调用一次就可以)

接下来实现代码 测试运行一下

#include<stdio.h>
#include<stdlib.h> //rand和srand函数头文件
#include<time.h> //time函数头文件
int main()
{
  srand((unsigned int)time(NULL));//使用time函数返回的时间戳作为srand函数的参数,产生rand函数的种子
  printf("%d\n", rand()); 
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  printf("%d\n", rand());
  return  0;
}

可以看到,单次运行中多次调用rand函数产生的随机数都是不同的,并且多次执行程序得到的随机数也是完全不同的,到此,已经实现了一定意义上的随机数

 

相关文章
|
机器学习/深度学习 人工智能 算法
|
网络协议
nmtui命令详解
【4月更文挑战第9天】`nmtui`是NetworkManager的文本用户界面工具,用于终端中的网络配置和管理。用户可通过它查看网络设置、配置接口、修改设置、添加/删除连接及调整连接优先级。操作步骤包括启动nmtui,选择编辑连接,修改网卡设置,保存并退出。此工具包含在NetworkManager-tui子软件包中,配置更改会持久生效。了解更多详情可参考相关文档。
1306 1
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
316 0
|
8月前
|
存储 人工智能 固态存储
轻量级AI革命:无需GPU就能运算的DeepSeek-R1-1.5B模型及其低配部署指南
随着AI技术发展,大语言模型成为产业智能化的关键工具。DeepSeek系列模型以其创新架构和高效性能备受关注,其中R1-1.5B作为参数量最小的版本,适合资源受限场景。其部署仅需4核CPU、8GB RAM及15GB SSD,适用于移动对话、智能助手等任务。相比参数更大的R1-35B与R1-67B+,R1-1.5B成本低、效率高,支持数学计算、代码生成等多领域应用,是个人开发者和初创企业的理想选择。未来,DeepSeek有望推出更多小型化模型,拓展低资源设备的AI生态。
1624 8
|
算法 安全 量子技术
量子计算与密码学:加密技术的新挑战
量子计算的崛起对密码学提出了新挑战。本文探讨了量子计算对现有加密技术的影响,分析了公钥密码、对称密码及通信安全所面临的威胁,并介绍了后量子加密算法等应对措施,展望了未来加密技术的发展趋势。
|
存储 缓存 监控
数据库优化:提升性能与效率的关键策略
【10月更文挑战第21】数据库优化:提升性能与效率的关键策略
|
数据采集 监控 数据可视化
ERP系统中的财务分析与财务报告
【7月更文挑战第25天】 ERP系统中的财务分析与财务报告
681 0
|
缓存 前端开发 JavaScript
理解 React 的 Fiber 架构
【8月更文挑战第6天】 理解 React 的 Fiber 架构
864 1
|
存储 C语言
C语言删除数组元素
C语言删除数组元素
427 0
|
数据挖掘 Python
【Python】已解决 ImportError: Missing optional dependency ‘xlrd‘. Install xlrd >= 1.0.0 for Excel support
【Python】已解决 ImportError: Missing optional dependency ‘xlrd‘. Install xlrd >= 1.0.0 for Excel support
2102 0

热门文章

最新文章