生成随机数

简介: C语言中的`rand()`函数生成0-RAND_MAX间的伪随机数,需包含`stdlib.h`。序列重复因默认种子为1,可使用`srand(unsigned int seed)`初始化,通常结合`time(NULL)`设置种子以产生不同序列。`time()`函数从1970年至今的秒数(时间戳),包含于`time.h`,用于提供变化的种子。通过`rand() % b + a`可调整生成指定范围[a, b]内的随机数。

一、rand函数


C语言提供了一个函数叫rand,这函数是可以生成随机数的,函数原型如下所示:


int rand (void);


rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767。


rand函数的使用需要包含头文件: stdlib.h


这里测试一下rand函数,这里多调用几次,产生5个随机数:





多次运行后发现: 一次运行中产生的5个数字是相对随机的,但是下一次运行程序生成的结果和上一次一模一样


如果再深入了解一下,我们不难发现,其实rand函数生成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法生成的随机数。真正的随机数的是无法预测下一个值是多少的。而rand函数是对一个叫"种子"的基准值进行运算生成的随机数。


之所以前面每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1。


如果要生成不同的随机数,就要让种子是变化的。



二、srand函数


C语言中又提供了一个函数叫 srand,用来初始化随机数的生成器的,srand的原型如下:


void srand (unsigned int seed);


程序中在调用rand 函数之前先调用srand 函数,通过srand 函数的参数seed来设置rand函数生成随机数时的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。


那也就是说给srand的种子如果是随机的,rand就能生成随机数;在生成随机数的时候又需要一个随机数,这矛盾了。



三、time


在程序中我们一般使用程序运行的时间作为种子的,因为时间时刻在发生变化的。


在C语言中有一个函数叫 time,就可以获得这个时间,time函数原型如下:


time_t time (time_t* timer);


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


time函数的参数timer,如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。


如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。


time函数的时候需要包含头文件:time.h


代码如下:







这时就实现了随机数的生成


四、设置随机数的范围


1.如果要生成0-99的随机数:


rand( )%100→余数的范围是0-99


2.如果要生成1-100的随机数


rand( )%100+1→%100的余数是0-99,加一后范围是1-100


3.所以要生成a-b的随机数


a+rand( )%b-a+1

目录
相关文章
|
数据采集 Python
使用多线程或异步技术提高图片抓取效率
图片抓取是爬虫技术中常见的需求,但是图片抓取的效率受到很多因素的影响,比如网速、网站反爬机制、图片数量和大小等。本文将介绍如何使用多线程或异步技术来提高图片抓取的效率,以及如何使用爬虫代理IP来避免被网站拒绝服务
378 0
使用多线程或异步技术提高图片抓取效率
|
存储 安全 Windows
PowerShell系列(六):PowerShell脚本执行策略梳理
【2月更文挑战第1篇】PowerShell 脚本执行策略用于控制何时以及何种方式执行 PowerShell 脚
|
关系型数据库 MySQL Linux
Centos7 环境使用 Docker 安装 Mysql 服务详解
Centos7 环境使用 Docker 安装 Mysql 服务详解
2130 0
Centos7 环境使用 Docker 安装 Mysql 服务详解
|
8月前
|
监控 前端开发 小程序
陪练,代练,护航,代打小程序源码/前端UNIAPP-VUE2.0开发 后端Thinkphp6管理/具备家政服务的综合型平台
这款APP通过技术创新,将代练、家政、娱乐社交等场景融合,打造“全能型生活服务生态圈”。以代练为切入点,提供模块化代码支持快速搭建平台,结合智能匹配与技能审核机制,拓展家政服务和商业管理功能。技术架构具备高安全性和扩展性,支持多业务复用,如押金冻结、录屏监控等功能跨领域应用。商业模式多元,包括交易抽成、增值服务及广告联名,同时设计跨领域积分体系提升用户粘性,实现生态共生与B端赋能。
762 12
|
分布式计算 监控 大数据
MaxCompute产品使用合集之CASE WHEN语句如何开窗函数一起使用
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
246 2
|
12月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
3656 8
|
存储 固态存储 关系型数据库
Apache Doris 系列: 入门篇-安装部署
Apache Doris 系列: 入门篇-安装部署
3908 0
|
Linux C++ 开发者
几款主流好用的markdown编辑器介绍
几款主流好用的markdown编辑器介绍
1223 0
|
并行计算 安全 Linux
如何设置环境变量KMP_DUPLICATE_LIB_OK=TRUE
【5月更文挑战第25天】如何设置环境变量KMP_DUPLICATE_LIB_OK=TRUE
1376 0
|
资源调度 JavaScript iOS开发
yarn的安装与配置(Windows/macOS)
yarn的安装与配置(Windows/macOS)
3189 0