c语言rand函数生成随机数,详解C语言生成随机数rand函数的用法[通俗易懂]

说到rand函数,大家是不是会和EXCEL中的rand函数混淆,当小编第一次接触的时候也以为是EXCEL的函数,本文是爱站技术频道小编为大家带来的详解C语言生成随机数rand函数的用法,一起来看看吧!函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子…

大家好,又见面了,我是你们的朋友全栈君。

说到rand函数,大家是不是会和EXCEL中的rand函数混淆,当小编第一次接触的时候也以为是EXCEL的函数,本文是爱站技术频道小编为大家带来的详解C语言生成随机数rand函数的用法,一起来看看吧!

函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成。

srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子。每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)time(NULL)改为srand(TP)(TP为任一常量),则无论何时运行、运行多少次得到的“随机数”都会是一组固定的序列,因此srand生成的随机数是伪随机数。

库函数中系统提供了两个函数用于产生随机数:srand()和rand()。 原型为:

函数一:int rand(void);

从srand (seed)中指定的seed开始,返回一个[0, RAND_MAX(0x7fff)]间的随机整数。

函数二:void srand(unsigned seed);

参数seed是rand()的种子,用来初始化rand()的起始值。

但是,要注意的是所谓的“伪随机数”指的并不是假的随机数。其实绝对的随机数只是一种理想状态的随机数,计算机只能生成相对的随机数即伪随机数。计算机生 成的伪随机数既是随机的又是有规律的 —— 一部份遵守一定的规律,一部份则不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正点到了事物的特性 —— 差异性;但是每种树的叶子都有近似的形状,这正是事物的共性 —— 规律性。从这个角度讲,我们就可以接受这样的事实了:计算机只能产生伪随机数而不是绝对的随机数。

系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始 值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的~~

所以为了避免上述情况的发生我们通常用srand((unsigned)time(0))或者srand((unsigned)time(NULL))来 产生种子。如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。 例如,srand((unsigned)time(NULL)*10)

另外,关于time_t time(0):time_t被定义为长整型,它返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒。

生成随机数函数rand用法,如代码所示:

#include “stdafx.h”

#include

#include

int _tmain(int argc, _TCHAR* argv[])

{

// 初始化随机数种子

// time函数返回从1970年1月1日零时零分零秒到目前为止所经过的时间,单位为秒

srand((int)time(NULL));

int j;

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

j = (rand() * 10) / RAND_MAX + 1; // 生成1~10之间的随机数

printf(“j = %d \n”, j);

}

unsigned start = (rand() * 1000)/ RAND_MAX + 15550; // 生成15550~16549之间的随机数

printf(“start = %d \n”, start);

start &= ~1; // 把start变为偶数,如果是奇数,则start变为start – 1的偶数

printf(“start = %d \n”, start);

getchar();

return 0;

}

运行结果如下所示:

j = 9

j = 6

j = 7

j = 8

j = 1

j = 5

j = 3

j = 1

j = 10

j = 9

start = 16185

start = 16184

本文是爱站技术频道小编给大家分享的详解C语言生成随机数rand函数的用法,大家在学习的时候可千万别混淆了,感兴趣的朋友可以继续留意爱站技术频道的推荐。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126051.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例[通俗易懂]

    mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例[通俗易懂]【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例时间:2016-11-0513:54来源:Oracle研究中心作者:HTZ点击:次天萃荷净Oracle研究中心学习笔记:分享一篇关于Oracle数据库关于SQL解析的详细文档,该文档详细介绍使用10049event事件来分析SQL语句的解析笔记。1,数据库版本SQL>select*fromv$ve…

    2022年10月1日
    2
  • 使用tcping命令ping指定端口「建议收藏」

    使用tcping命令ping指定端口「建议收藏」ping是简单的测试网络连接情况的小工具,对于一般用户很实用,但是ping有个缺点就是,不能指定端口,同时如果源地址禁ping的话,ping命令就形同虚设。——前言tcping命令是针对tcp监控的,也可以看到ping值,即使源地址禁ping也可以通过tcping来监控服务器网络状态,除了简单的ping之外,tcping最大的一个特点就是可以指定监控的端口。tcping命令使用方法很简单下载

    2022年6月23日
    45
  • 麦克风声源定位原理_基于麦克风阵列的声源定位算法之GCC-PHAT

    麦克风声源定位原理_基于麦克风阵列的声源定位算法之GCC-PHAT目前基于麦克风阵列的声源定位方法大致可以分为三类:基于最大输出功率的可控波束形成技术、基于高分辨率谱图估计技术和基于声音时间差(time-delayestimation,TDE)的声源定位技术。基于TDE的算法核心在于对传播时延的准确估计,一般通过对麦克风间信号做互相关处理得到。进一步获得声源位置信息,可以通过简单的延时求和、几何计算或是直接利用互相关结果进行可控功率响应搜索等方法。这类算法实现…

    2022年9月22日
    3
  • 【黄啊码】软件测试之Loadrunner教程「建议收藏」

    【黄啊码】软件测试之Loadrunner教程「建议收藏」【黄啊码】软件测试之Loadrunner教程

    2022年5月10日
    42
  • 京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节「建议收藏」

    京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节「建议收藏」的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里,第京的季节里

    2022年10月3日
    4
  • java 打包 jar包和war包的区别

    java 打包 jar包和war包的区别jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。这是jar的里面的class文件war包:其实…

    2022年5月23日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号