【编程基础】C语言产生随机数需要了解的几个函数

C语言产生随机数是一个常见的编程功能任务,当然这个也不难,调用两三个函数就出来了,但是你知道这些函数具体是起到怎样的作用,并且是它们是如何产生随机数的吗?

几个概念

随机数:数学上产生的都是伪随机数,真正的随机数使用物理方法产生的。

随机数种子:随机数的产生是由算术规则产生的,srand(seed)的随机数种子不同,rand()的随机数值就不同,倘若每次的随机数种子一样,则rand()的值就一样。所以要产生随机数,则srand(seed)的随机数种子必须也要随机的。

用srand()产生随机数种子

原型:void srand ( unsigned int seed );

作用是设置好随机数种子,为了让随机数种子是随机的,通常用time(NULL)的值来当seed。

用rand()产生随机数

原型:int rand ( void );

作用是产生一个随机数,当然随机数是有范围的,为0~RAND_MAX之间,随机数与随机数种子有关。具体来说是,在产生随机数 rand()被调用的时候,它会这样执行:

如果用户之前调用过 srand(seed)的话,他会重新调用一遍 srand(seed)以产生随机数种子;

如果发现没有调用过 srand(seed)的话,会自动调用 srand(1)一次。

如果调用srand(seed)产生的随机数种子是一样的话(即seed的值相同),rand()产生的随机数也相同。

所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。这里就是经常采用time(NULL)产生随机数种子的原因。

time()用于随机数种子

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

time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数。

用的时候这样:srand(unsigned(time(NULL)));例如产生1~10之间的随机整数

#include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); for(int i=0;i < 10;i++) { int randValue=rand()%10; } }

上面的程序中要注意srand是在for循环外面的,如果把srand放到for循环里面,则每次产生的随机数都相同。


原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯云数据库团队的专栏

PostgreSQL 的空闲数据块管理机制解析

PostgreSQL是通过 MVCC (Multi-Version Concurrency Control) 来保证事务的原子性和隔离性,本文通过一些事例对 M...

5581
来自专栏极客编程

Apache spark 的一些浅见。

分布并行计算和几个人一起搬砖的意思是一致的,一个资源密集型的任务(搬砖或计算),需要 一组资源(小伙伴或计算节点),并行地完成:

982
来自专栏C# 编程

异步编程中使用帮助类来实现Thread.Start()的示例

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 ...

1780
来自专栏大数据架构

Spark SQL / Catalyst 内部原理 与 RBO

从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成 DAG 对 RDD 的操作

1256
来自专栏小小挖掘机

数据城堡参赛代码实战篇(四)---使用pandas合并数据表

小编们最近参加了数据城堡举办的“大学生助学金精准资助预测”比赛,分组第19名的成绩进入了复赛,很激动有木有!在上一篇文章中,小编主要介绍了pandas中使用dr...

3486
来自专栏C/C++基础

C#用GDI画任意形状的form

Point[] points = list.ToArray();//将点集合赋给点数组

552
来自专栏听雨堂

常用代码

图层 1、加载地图,选择图层    if(!Page.IsPostBack)    {     MapControl1.Map.Clear();     Map...

1719
来自专栏Spark学习技巧

Spark高级操作之json复杂和嵌套数据结构的操作一

一,基本介绍 本文主要讲spark2.0版本以后存在的Sparksql的一些实用的函数,帮助解决复杂嵌套的json数据格式,比如,map和嵌套结构。Spark2...

2.2K5
来自专栏xingoo, 一个梦想做发明家的程序员

[翻译]CURAND Libaray--Host API--(2)

2.3 返回值 所有的CURAND host端的函数返回值都是curandStatus_t.如果调用没有错误,则返回成功,即返回值为CURAND_STATUS_...

18510
来自专栏林德熙的博客

C# 对 byte 数组进行模式搜索

最简单的方法是进行数值判断,但是代码最少是使用Linq ,效率比较高是使用 Boyer-Moore 算法,下面就告诉大家几个算法的代码

481

扫码关注云+社区