用C语言产生随机数重要用到rand函数、srand函数、及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明。

int rand(void);//生成一个随机数

voidsrand(unsigned int seed); //为rand设置“种子”的值

srand()就是给rand()提供种子seed,如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的。通常的做法是以这样一句代码:

srand((unsigned)time(NULL));

来取代,这样将使得种子为一个不固定的数,这样产生的随机数就不会每次执行都一样了。先看一个例子:

#include

#include

#include

int test_rand()

{

int i;

/* Seed therandom-number generator with current time so that

* thenumbers will be different every time we run.

*/

srand((unsigned)time( NULL ) );

/* Display10 numbers. */

for( i = 0;i < 10; i++ )

printf("%6d\n", rand());

return 0;

}

C的函数库之所以没有把使用系统时钟初始化随机种子这步重要的操作直接放进rand函数的实现中,可能有如下原因:

1.可以高效产生连续的随机数,不用每次都初始化;

2.给程序员以更高的灵活性,因为可能在要求较高的场合,应该使用更好的的数据做种子,而不是系统时钟;

3.对于只是想产生大量伪随机数来尽兴某种验证或者统计,未必需要初始化,大不了程序每次运行都产生同样的一系列随机数而已——有些情况下,这是无所谓的。

4.作为伪随机序列产生器的rand()函数,必须具备的一个重要特性就是:产生的序列必须是可重现的。这不仅仅是一个算法,相当大的程度上,它关系到代码测试的准确性。如果算法中使用了和rand()的结果相关的数据,通过一个可控的可重现序列,我们就有机会再现每一次测试的过程,从而更有效的找到问题的所在。所以这里提出一个建议,代码中,如果rand()的函数结果关系到算法的结果,那么,必须保证你的rand()调用是可重现的。

另外使用rand还用几个问题:

如何生成 0到

100之间的随机数?

用"int x = rand() % 100;"这种方法是不或取的,会使产生的随机数不在随机。产生一个0到n之间的随机数的比较好的做法是:

j=(int)(n*rand()/(RAND_MAX+1.0));

如何产生一个范围在(a,b)之间的随机数?

先计算a与b的差值,设c=b-a;产生一个介于0和b-a的数值,设

d=(int)((b-a)*rand())/(RAND_MAX+1.0)

让上面产生的值d加上a就可以了。

如果你使用C++11编程,请使用C++11自己的随机数生成方法!

虽然前面介绍了那么多,但是我还是想说C语言的随机数生成方法有很多缺陷,很容易被引入非随机性,而且功能单一,如果可以的话去,你最好避免使用它。

c语言中数组相关问题

c语言中数组相关问题: 1.数组基本定义: 相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组 ...

c语言中条件编译相关的预编译指令

一. 内容概述 本文主要介绍c语言中条件编译相关的预编译指令,包括#define.#undef.#ifdef.#ifndef.#if.#elif.#else.#endif.defined. 二.条件编 ...

【编程开发】C语言中随机数rand使用注意事项

[编程开发]C语言中随机数rand使用注意事项 标签: [编程开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语 ...

C语言中随机数的生成

刚好在找这方面的资料,看到了一片不错的,就全文转过来了,省的我以后再找找不到. 在C语言中,可以通过rand函数得到一个“伪随机数”.这个数是一个整数,其值大于等于0且小于等于RAND_MAX.ran ...

c语言中文件相关操作

一 .首先介绍一下数据文件的类型: 1.二进制文件(映像文件):在内存中以二进制形式存取. 2.文本文件(ascii文件):以ascii码形式存取的文件. 通俗的讲,在Mac下,你把一个文件丢进记事本 ...

Zend&lowbar;Frameowrk中进行多语言国际化的相关的配置和使用

在使用Zend_Framework建立网站,若网站在以后的使用中面向国际,这时就需要实现网站的多语言国际化问题.使用Zend_Framework开发的网站需要进行多语言的开发时,就需要用到了Zend_ ...

C语言中如何产生随机数

今天看到一段小程序 ,里面用到随机数.才发现在C语言中产生随机数不像matlab中那么简单. C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数 ...

c语言中实现从0-1的随机数输出

原文:c语言中实现从0-1的随机数输出 今天晚上同学问了一个巨简单的问题,问我怎么用c语言输出0-1的随机数,可别说,一时之间还想不出来.在写的过程中发现,直接调用random函数还不能实现,用以下方 ...

C语言中如何写一个简单可移植而又足够随机的随机数生成器

在C语言中标准库中的随机数产生函数的返回可能不是最优的,因为有些随机数生成器的低位并不随机,而另一些返回随机数的函数实现上又太复杂鸟.所以rand()%N并不是一个好方法,牛人给出的建议是使用: ra ...

随机推荐

GeoIP Legacy City数据库安装说明

Here is a brief outline of the steps needed to install GeoIP Legacy City on Linux/Unix. The installa ...

linux git安装及配置(包括更新)

1.在终端运行命令 sudo apt-get install git 2.查看版本号 git --version  (若不是最新可更新 自选) 更新提示: sudo add-apt-repositor ...

OC----面向对象

创建一个类 comm+n 实例变量的可见度 @public,@protect@private @public  // 共有的,在类的内部和外部都可以进行访问 @protected   // 受保护的, ...

android之数据存储之SQLite

SQLite开源轻量级数据库,支持92-SQL标准,主要用于嵌入式系统,只占几百K系统资源此外,SQLite 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrain ...

highcharts 结合phantomjs纯后台生成图片系列二之php

上篇文章中介绍了phantomjs的使用场景,方法.本篇文章详细介绍使用php,highcharts 结合phantomjs纯后台生成图片. 一.准备: 下载phantomjs解析插件,从 highc ...

任务型对话(一)—— NLU(意识识别和槽值填充)

1,概述 任务型对话系统越来越多的被应用到实际的场景中,例如siri,阿里小密这类的产品.通常任务型对话系统都是基于pipline的方式实现的,具体的流程图如下: 整个pipline由五个模块组成:语 ...

2016级算法期末上机-H&period;难题&&num;183&semi;AlvinZH&&num;39&semi;s Fight with DDLs III

1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下 ...

intellij idea 远程tomcat 调试

由于在服务器上远程调试风险较高,所以万不得已的情况下 不要这样做.可以本地调试好  再上传到服务器上. 1.关闭防火墙 启动Firewalld,及开机自启. # systemctl start fir ...

c语言中有关随机数的程序,C语言中随机数相关问题相关推荐

  1. 在JAVA语言程序中main_在Java程序main方法中,正确的参数是

    [单选题]下列叙述中,错误的是 [填空题]Access属于()数据库,Access中,不允许在主关键字字段中有重复值或(). [单选题]如下哪些字符串是Java中的标识符? [填空题]常用的基本电量传 ...

  2. c语言按键实现跳转程序,C语言中的跳转语句

    <C语言中的跳转语句>由会员分享,可在线阅读,更多相关<C语言中的跳转语句(4页珍藏版)>请在人人文库网上搜索. 1.C语言中的跳转语句c语言有4个跳转语句return.got ...

  3. C语言中删除字符串中一个字母,C程序删除字符串中除字母之外的所有字符

    C程序删除字符串中除字母之外的所有字符 在此示例中,您将学习从用户输入的字符串中删除除字母之外的所有字符. 要理解此示例,您应该了解以下C语言编程主题: 删除字符串中除字母之外的字符#include ...

  4. 如何用c语言编写炫酷烟花程序,C语言实现放烟花的程序

    这是一个利用C语言编写放烟花的程序(同时也可以播放音乐),供大家参考,具体内容如下 代码如下 #pragma once #include #include //图形界面库头文件 #include // ...

  5. C语言输入end时结束程序,c语言输入eof结束怎么写

    1.C语言里的EOF(结束程序)怎么用 在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file).在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件 ...

  6. c语言入门经典18个程序,C语言入门经典

    面向C语言初学者,详细且全面地讲解了C语言的各种知识,从基础知识到高级应用,由浅入深,循序渐进地引领读者掌握C语言中的各种编程技术,体会C语言的灵活与强大.同时,<C语言入门经典>着眼于应 ...

  7. kotlin中判断字符串_Kotlin程序查找字符串中字符的频率

    kotlin中判断字符串 Given a string and a character, we have to find the frequency of the character in the s ...

  8. c语言编程 生理周期的程序,C语言程序设计100例之(9):生理周期

    例9    生理周期 问题描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为 23 天.28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如 ...

  9. 服务器在运行中,由于另一个程序正在运行中,此操作无法完成

    Visual Studio2008中用excel automation读取Excel文档,有时会程序提示"由于另一个程序正在运行中,此操作无法完成.请选择'切换到'来激活正在运行中的程序,并 ...

最新文章

  1. 马腾宇的AI学术历程:做科研要考虑长期的影响力
  2. python 2: 解决python中的plot函数的图例legend不能显示中文问题
  3. 钉钉推出“钉工牌”,门禁、差旅、员工福利一码通用
  4. linux指令解压rpm,dpkg rpm apt yum 的常用指令 +linux 各种解压缩方法.docx
  5. Coin-row problem(1139)
  6. windows7下redis的安装实践
  7. [Internet]使用IP安全策略阻止Ping
  8. 05【应用工具简介】PM 流程图,思维导图,原型图绘制?怎么绘制不被解雇?
  9. 【疑难杂症】Excel数值自定义显示万,并保留两位小数
  10. 中国饭局上的座次讲究
  11. gmap mysql cachet_MySQL中binlog cache使用流程解惑
  12. TFN高性能无线电综合测试仪让测试更加精准
  13. linux spec文档解析
  14. 台积电5nm光刻技术
  15. Creo,SolidWorks,Freecad,QCad,DraftSight,QutoCad
  16. 卖座网项目2流程解析
  17. 2021宿迁所有高中高考成绩查询,宿迁市“赫赫有名”的4所高中,高考成绩说话,不愧是211后援团...
  18. 开发需要的软件-Java
  19. Oracle11g字符集AL32UTF8修改为ZHS16GBK详解
  20. easybuy源码_EasyBuy111

热门文章

  1. 性价比最高处理器和国产处理器I.MX6UL/A40I/T3对比
  2. linux学习笔记:06-ubuntu中挂载U盘
  3. html 拼图游戏,HTML5人物拼图游戏
  4. 麒麟座IIC-STM32F103RET6(2)-完成US延时
  5. 《呼吸法门精要》南师所讲。读后感
  6. 说话人性别识别——语音检测初探
  7. Android 强大的图片加载缓存— Glide
  8. “云安全+云保护” 谜团技术解析
  9. 台式电脑上没有显示计算机怎么办,电脑显示器无视频输入怎么办
  10. 初探微信摇一摇周边与iBeacon