linux c语言 取随机数,C语言 获取随机数
>本文讲述了在C语言中如何获取随机数。
## rand()
`rand()`函数可以用来产生伪随机数,它根据一个基准(种子)以某个递推公式推算出随机数。当使用rand()产生的一系列数符合正态公布时,就相当于产生了随机数。计算机正常开机后,种子的值是默认固定的,为1。
/* @brief 随机数发生器
* @return 返回一个伪随机数
* @header stdlib.h
*/
int rand(void)
`rand()`返回随机数值的范围在`0`至`MAX_INT`(定义在limits.h)间。每一个数被选择的概率是相同的。
## srand()
`rand()`产生的是伪随机数字,程序每次执行时产生的序列是相同的。若要每一次运行程序都产生不同的序列,则需用函数`srand()`初始化随机数种子。
/* @brief 初始化随机数发生器
* @param 种子
* @header stdlib.h
*/
void srand(unsigned int seed)
`srand()`用来设置`rand()`产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,`rand()`所产生的随机数序列每次就会一样。
### 选择随机数种子
#### 使用当前时钟作为种子
可以利用`srand((unsigned int)(time(NULL))`的方法,使用当前时钟作为种子传递给`srand()`。
## 产生随机数的用法
1. 给srand()提供一个种子;
2. 调用rand(),返回一个随机数(在0到MAX_INT之间);
3. 根据需要多次调用rand(),从而不间断地得到新的随机数;
无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
## 产生一定范围的随机数
|随机数区间|生成表达式|
|--|
|[a,b)|(rand() % (b-a))+ a|
|[a,b]|(rand() % (b-a+1))+ a|
|(a,b]|(rand() % (b-a)) + a + 1|
上面几个表达式都是参照通用公式`a + rand() % n `生成的。其中的a是起始值,n是整数的范围。
## 生成[0, n-1]之间的k个不同随机数
怎么快速生成[0, n-1]之间的k个不同的随机顺序的随机整数?按照直觉,我们会通过不停地调用`rand() % n`来生成新的随机数,直到生成够k个为止来达成目的,这期间还用到了某种容器和搜索算法。然而,这种思路导出的代码复杂又低效。
实际上,有一个优美的实现可以达到要求:
```c
/* 生成[0, n-1]之间的k个不同随机数 */
void foo(int* a, int n, int k)
{
int i;
for(i = 0; i < n; ++i)
a[i] = i;
for(i = 0; i < k; ++i)
swap(&a[i], &a[randint(i, n-1)]);
}
```
其中,`swap(int*, int*)`交换两个`int*`指针指向的内存单元的值,`randint(min, max)`生成[min, max]之间的随机数。
linux c语言 取随机数,C语言 获取随机数相关推荐
- java获取随机数方法_《Java语言程序设计》Java获取随机数方法
<Java语言程序设计>Java获取随机数方法 在Java中我们可以使用java.util.Random类来产生一个随机数发生器.它有两种形式的构造函数,分别是Random()和Rando ...
- Flutter获取随机数 Dart语言核心基础
也许你迷茫,但是我想说,在你迷茫的同时,保持本心,过好今天就好. 学习Dart语言,首先我们需要使用到一个语言调试工具 DartPad 在 Dart 中,dart:math 类库提供了 数学常数和函数 ...
- linux更改语言脚本,Linux shell脚本入门——shell语言脚本【CentOS】
认识脚本 是使用一种特定的描述性语言,依据一定的格式编写的可执行文件.脚本语言又被称为扩建的语言, 或者动态语言, 是一种编程语言, 用来控制软件应用程序, 脚本通常是以文本 (ASCⅡ) 保存, 只 ...
- r软件 linux,分享|Linux 上好用的 R 语言 IDE
前一段时间,我已经介绍过 Linux 上针对 C/C++ 语言的最好 IDE.很显然 C 或 C++ 并不是现存的唯一的编程语言,是时间讨论某些更加特别的语言了. 假如你做过一些统计工作,很可能你已经 ...
- Linux学习篇——基于C语言使用结构体、链表实现贪吃蛇
基于Linux下,通过c语言.链表.结构体下实现--贪吃蛇小项目 一.需要用的头文件以及Linux图形库函数.数据初始化 (1)关于curses.h图形库函数 二.地图制作 三.蛇身链表的初始化生成 ...
- R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator )
R语言使用basename函数获取数据链接地址中的文件名称(removes all of the path up to and including the last path separator (i ...
- R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项)、randomSequence函数创建不含重复项的随机序列数据集、创建随机字符串
R语言使用random包生成随机数或者随机字符串实战:randomNumbers函数创建随机整数的数据集(包含重复项).randomSequence函数创建不含重复项的随机序列数据集.创建随机字符串 ...
- R语言list.dirs函数获取目录列表实战
R语言list.dirs函数获取目录列表实战 目录 R语言list.dirs函数获取目录列表实战 #仿真数据 #获取目录列表
- R语言list.files函数获取文件列表实战
R语言list.files函数获取文件列表实战 目录 R语言list.files函数获取文件列表实战 #仿真数据 #基本语法
- R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战
R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录
最新文章
- [pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset. Integer indices would ov
- 跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP
- linux 安全基线加固
- 从频率角度理解为什么深度可以加速神经网络的训练
- Maven编译代码的相关命令
- python调用动态库出现error193_切换到64位时使用Python Winerror 193
- 1.5 编程基础之循环控制 10 满足条件的数累加
- 微信小应用资源汇总整理
- 查看linux应用zabbix版本
- Cadence元件库介绍
- 现代操作系统 第三章 内存管理 习题
- 一级必杀,防不胜防的漏洞,WEB安全基础入门—文件上传漏洞
- matlab tube函数,2015-08-25-OpenCV for Matlab Users (5) - OpenCV 自身易搞混的函数辨析
- PLC 定时器实现 亮1秒,灭4秒,一直循环下去
- flash常见问题集锦,很适合新手哦
- Linux查看和结束进程命令详解
- 程序员学英语——In November the English learning summary
- 围棋GUI界面Sabaki的安装与使用
- Unity的Handles类
- 学习笔记——day47(jsp)