c语言 伪随机数程序,C语言的伪随机数

一直想好好的系统的学习一下C语言的伪随机数,今天终于逮到机会了

伪随机数

C语言中有可以产生随机数据的函数,需要添加stdlib.h和time.h头文件。首先在main函数开头加上srand(unsigned)time(NULL))。

先来介绍一下srand

头文件:

定义函数:void srand (unsigned int seed);

函数说明:srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用getpid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

再来介绍一下time,

函数名称: time

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

函数功能: 得到机器的日历时间或者设置日历时间

函数返回: 机器日历时间

参数说明: timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,time_t是一个long类型

所属文件:

因此上述的srand((unsigned)time(NULL))是利用系统时间来初始化随机种子的。

最后来介绍一下重要的一个函数rand

rand函数

头文件:

定义函数:int rand(void)

函数功能:产生随机数

函数说明:因为rand的内部实现是用线性同余法做的,它不是真的随机数,只不过是因为其周期特别长,所以,在一定的范围里可看成是随机的。rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。

返回值: 返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。且0-RAND_MAX每个数字被选中的机率是相同的。

rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

举个例子

#include

#include

#include

int main(){

srand((unsigned)time(NULL));

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

printf("%d ",rand());

}

return 0;

}

e46faef3910f34fcfc167799b4a1f520.png

说白了上述的随机数范围是0~32767之间,若没有设置系统时间种子,则rand默认随机种子为1,则多次运行结果都是一致的。

当然,若想要一个给定范围的随机数,则需要使用rand()%(b-a+1)+a。显然rand()%(b-a+1)的范围是[0,b-a],再加上a即为[a,b]。

举个例子([0,1]和[3,6]之间的随机数)

#include

#include

#include

int main(){

srand((unsigned)time(NULL));

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

printf("%d ",rand()%2);

}

putchar('\n') ;

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

printf("%d ",rand()%4+3);

}

return 0;

}

7686c3f7b128c6ce79e9608e42ca2b25.png

一般来说这个范围最大是0~32767,若想要生成超过32767的更大的随机数,则可以采用,移位或者拼凑或者用随机数除以RAND_MAX,这样就会得到一个[0,1]范围内的浮点数。只需要这个浮点数乘以范围长度(b-a+1)再加上a即可。即(int)((double)rand()/32767*(b-a+1)+a),相当于这个浮点数在[a,b]范围内的比例位置

举个例子

#include

#include

#include

int main(){

srand((unsigned)time(NULL));

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

printf("%d ",(int)((1.0*rand()/RAND_MAX*50000+10000)));//10000~60000

}

return 0;

}

7952385b8499b1771a1417d409bf2e35.png

PS:介绍一个简单的AC技巧,在程序中一次性计算出所有需要用到的结果,然后查询直接取这些结果,典型的AC技巧有木有(●ˇ∀ˇ●)

小结

C语言的伪随机数适用范围还是挺广泛的,下次需要用起来的时候,就不需要再去找什么资料了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最大隶属度原则_模糊数学笔记:六、模糊模型识别-I(最大隶属度原则)

1、模型识别的问题提出模型识别&#xff0c;通俗地理解即是对一个类别未知的对象进行归类&#xff08;或者叫分类&#xff09;。这里与聚类不同的是&#xff0c;聚类实际上是要区分出已有的样本哪些属于同一类&#xff0c;但并没有参考标准。而识别则事先有参考的标准&#xff…

C语言经典题

C 库函数 - tanh()描述C 库函数 double tanh(double x) 返回 x 的双曲正切。声明下面是 tanh() 函数的声明。double tanh(double x)参数x -- 浮点值。返回值该函数返回 x 的双曲正切。实例下面的实例演示了 tanh() 函数的用法。#include#include int main (){ double x, ret;…

用c语言产生大素数,C语言实现寻找大素数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼找到一亿内所有素数并写入文件用时 35秒.#include "math.h"#include "stdio.h" #include "stdlib.h" #include "time.h"int isP(int num,int *p) { int i; int lenp[0]; int flag1; p;for…

java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出

java ee自动生成编码如果您只需要在EE Web模块中处理少量请求URI&#xff0c;那么在Servlet代码中生成自己HTML响应可能比使用完整的模板库更容易。 作为示例的一部分&#xff0c;我尝试了一个非常简单的Java DSL&#xff0c;该Java DSL在编写自己的Serlvet时生成html输出。 代…

jq 控制td只显示一行_CSS让表格里的内容强制显示一行,超出长度显示省略号

在写html页面的时候&#xff0c;会经常用到表格&#xff0c;而且很多时候一个tr里边需要包含好几个td&#xff0c;这样就会导致tr的高度不一致&#xff0c;被撑开了这时候&#xff0c;如果能让td里的内容强制显示在一行&#xff0c;并让超出边界范围的内容显示点点&#xff0c;…

C++11的模板改进

C11关于模板有一些细节的改进&#xff1a;模板的右尖括号模板的别名函数模板的默认模板参数模板的右尖括号C11之前是不允许两个右尖括号出现的&#xff0c;会被认为是右移操作符&#xff0c;所以需要中间加个空格进行分割&#xff0c;避免发生编译错误。int main() {std::vecto…

java面试题2014_Java生态系统– 2014年我的5大亮点

java面试题20141月1日-RedMonk Analyst公司宣布Java比以往任何时候都更加流行和多样化&#xff01; 2014年&#xff0c;随着FOSDEM的Free Java会议室的年会&#xff0c;Java生态系统开始轰轰烈烈地响起。 除了关于OpenJDK和相关主题的许多精深的技术讲座外&#xff0c;Steve OG…

android 第三方圆弧进度条,android 可配置的圆弧进度条

Arc ProgressBar Configurable 圆弧环形进度条DEMOAttributesnameformatdescriptionborderWidthinteger圆弧边框的宽度progressStyletick/arc进度条类型&#xff0c;tick 为带刻度的radiusinteger半径arcbgColorcolor圆弧的边框背景degreeinteger弧度&#xff0c;设置为 0 即为…

三分钟让孩子的数学开窍

周末给孩子灌了一个世界观和方法论&#xff1a;用笛卡尔坐标系描述世界。 我强调&#xff0c;学习笛卡尔坐标系不是做题&#xff0c;它是工具&#xff0c;它是帮你解题的&#xff0c;而不是为难你的。 任何数学题放在笛卡尔坐标系都可以通过机械的方法硬算&#xff0c;计算过程…

oracle大对象实例_超大型Oracle数据库设计实例

超大型系统的特点为&#xff1a; 1.处理的用户数一般都超过百万&#xff0c;有的还超过千万&#xff0c;数据库的数据量一般超过1TB&#xff1b; 2.系统必须提供实时响应功能&#xff0c;系统需不停机运行&#xff0c;要求系统有很高的可用性及可扩展性。 这篇是笔者针对以上特…

C++定时器的实现之格式修订版

个人认为一个完备的定时器需要有如下功能&#xff1a;在某一时间点执行某一任务在某段时间后执行某一任务重复执行某一任务N次&#xff0c;任务间隔时间T那么如何实现定时器呢&#xff1f;下面是我自己实现的定时器逻辑&#xff0c;源码链接最后会附上。定时器中主要的数据结构…

java 性能调优_Java性能调优调查结果(第四部分)

java 性能调优这是本系列中的最后一篇文章&#xff0c;我们将分析我们在2014年10月进行的Java Performance Tuning Survey的结果。如果您尚未阅读第一篇文章&#xff0c;建议您首先阅读以下内容&#xff1a; 性能问题的频率和严重性 最受欢迎的监控解决方案 查找根本原因的工…

Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发

接上篇文章Android之BLE(低功耗)蓝牙开发&#xff0c;本篇文章针对上篇博文中提出的两款打印机的开发流程进行记录。首先不管时佳博打印机还是汉印打印机&#xff0c;都是先对他们各自的lib进行导入&#xff0c;如图&#xff1a;导入lib之后&#xff0c;一定要记得进行sync pro…

C 桥接模式 - 开关和电器

桥接模式&#xff08;Bridge Pattern&#xff09;是将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。1模式结构UML 结构图&#xff1a;Abstraction&#xff08;抽象类&#xff09;&#xff1a;用于定义抽象类的接口&#xff0c;并且维护一个指向 Implementor…

centos8配置本地光盘yum源_CentOS8 配置本地yum源的详细教程

centos8发行版通过 baseos 和应用流 (appstream) 仓库发布&#xff0c;appstream 是对传统 rpm 格式的全新扩展&#xff0c;为一个组件同时提供多个主要版本centos8 自带封装了nginx&#xff0c;这篇文章给大家介绍centos8 配置本地yum源&#xff0c;具体内容如下所示&#xff…

javafx显示image_如何摆脱JavaFX中的重点突出显示

javafx显示image今天&#xff0c;有人问我是否知道摆脱JavaFX控件&#xff08;分别是按钮&#xff09;的焦点突出的方法&#xff1a; 有关此问题的大多数文章和提示建议添加&#xff1a; .button:focused {-fx-focus-color: transparent; }但是使用这种样式&#xff0c;仍然…

android aop静态方法,spring aop 不能对静态方法进行增强解决

想要通过aop的方式记录HttpUtils发出的post请求日志&#xff0c;但是 aop 不能对静态方法进行增强。只能对实例方法进行增强。。如果一定要增强静态方法&#xff0c;我们可以对目标类使用单例模式&#xff0c;然后通过调用实例方法去调用那个静态方法&#xff0c;而且对应的对象…

汉字笔画动图怎么做_隶书基本笔画教程(动态图)

隶书开创并奠定了汉字的书写形式。而隶书的美时而古朴遒劲&#xff0c;时而秀美温润&#xff0c;实在是令人神往。笔法有方有圆&#xff0c;方圆并用。下面文章以明朗的笔迹演示&#xff0c;结合相对切实的例字&#xff0c;给大家详尽讲解隶书的基本写法。掌握这些基本写法后&a…

C语言没有引用,只有指针

这个问题是昨晚上有同学在知识星球提问&#xff0c;但是因为前两天一直在出差&#xff0c;比较累&#xff0c;没认真回答&#xff0c;今天打球回来&#xff0c;就把这个事情解决了。我想说的已经在题目说明的很清楚了&#xff0c;C语言是没有引用的&#xff0c;引用是在C 里面才…

java日志使用_使用Java 8防止日志过宽

java日志使用一些日志将被机器消耗并永久保存。 其他日志仅用于调试和供人类使用。 在后一种情况下&#xff0c;您通常要确保您不会产生太多的日志&#xff0c;尤其是不会产生太宽的日志&#xff0c;因为一旦行长超过一定大小&#xff08; 例如&#xff0c;此Eclipse bug &…