当前位置: 首页 > news >正文

西安网站建设公司 云阔建站开发软件

西安网站建设公司 云阔,建站开发软件,北京建筑职业培训网,做模具行业的网站c语言中可以用rand()函数生成随机数#xff0c;今天来探讨一下rand()函数的基本用法和实际应用。 本系列文章共分两讲#xff0c;今天主要介绍一下伪随机数生成的原理#xff0c;以及在伪随机数生成的基础上#xff0c;生成随机数的技巧#xff0c;下一讲主要介绍无重复随…c语言中可以用rand()函数生成随机数今天来探讨一下rand()函数的基本用法和实际应用。 本系列文章共分两讲今天主要介绍一下伪随机数生成的原理以及在伪随机数生成的基础上生成随机数的技巧下一讲主要介绍无重复随机数生成的方法和舒尔特方格数字生成的实例。本文采用循序渐进的方式逐步介绍并且贴上了实际测试的代码和结果。有不详和不实之处请各位大神批评指正。 目录 一、rand()函数的几个要点 1、rand()函数所在库 2、rand()函数的范围 3、rand()函数为伪随机数 4、线性同余算法简介 二、rand()函数的基本使用技巧 1、单独使用 2、配合srand()函数使用 (1)srand()函数原型 (2)所在库也是cstdlib (3)srand()的作用 3、配合time()或getpid()使用 (1)time(NULL)函数 (2)getpid()函数 三、rand()函数的扩展功能 1、生成0~n(n1)随机整数 2、生成n~m(n1)范围内的随机整数,m-n 一、rand()函数的几个要点 1、rand()函数所在库 rand()函数原型int rand(void);  所在的库为cstdlib所以使用时需要引入cstdlib头文件。 2、rand()函数的范围 当为int型时随机数的范围为0~32767。 3、rand()函数为伪随机数 rand()的内部实现是用线性同余法做的它不是真的随机数因其周期特别长故在一定的范围里可看成是随机的。 4、线性同余算法简介 线性同余算法是一种迭代算法每次迭代计算出的结果就是伪随机数其迭代公式为 (1)                       式中 为第次迭代值 为第次迭代值 、为常数 为随机数范围(由rand()数据类型确定如果为int则为32768) 公式第一次迭代 所用的为初始值也称为种子(seed)也就是当、、都确定后随机数的序列是由值决定的而系统默认其值为1。 二、rand()函数的基本使用技巧 1、单独使用 单独使用rand()函数示例代码如下 #include iostream #include cstdlib #include windows.h using namespace std;int main() {while(1){coutrand()endl;Sleep(1000); } } 经过多次测试发现这样一个规律每次运行程序时产生的随机数序列都是一样的都固定不变为[41,18467,6334,26500,...]如下图所示。因为我们在程序中没有设定而系统默认值为1所以根据(1)式算出来的为随机数序列值都是一样的。 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 5705 28145 23281 16827 9961 491 2、配合srand()函数使用 (1)srand()函数原型 void srand (usigned int seed) (2)所在库也是cstdlib (3)srand()的作用 用来设置rand()产生随机数时的随机数种子。参数seed是整数当改变seed值时产生的伪随机数序列就会发生改变。在程序中设定seed0如下所示。 #include iostream #include cstdlib #include windows.h using namespace std;int main() {while(1){srand(0);coutrand()endl;Sleep(1000); } } 运行程序后发现伪随机数序列发生变化了如下图所示。 38 7719 21238 2437 8855 11797 8365 32285 10450 306123、配合time()或getpid()使用 使用srand()函数改变seed数值可以改变伪随机数的序列。每次要想生成不同的伪随机数序列就要手动改变seed值也不是很方便。所以最好的办法是每次运行程序seed值都可以自动改变。通常可以利用time(NULL)或getpid()的返回值作为seed。 (1)time(NULL)函数 time(NULL)的返回值为当前时间的时间戳(以秒为单位)比如2023-8-2 17:19:04对应的时间戳数值为1690967944。所以每次运行时间不一样通过srand()函数给rand()函数设定的seed的值也不一样因此产生的随机数序列也就不一样了。 #include iostream #include cstdlib #include ctime #include windows.husing namespace std;int main() {srand(time(NULL));while(1){coutrand()endl;Sleep(1000);}} 下边是两次运行的结果可见产生的随机序列不一样了。 28572 10647 18752 10924 2469 21939 7821 17697 30059 16936 9742 13113 23443 17313 28729 2282 24264 19083 6048 13814 26147 8260 3416 16741 2642 15228 4765 25104 30495 26600 (2)getpid()函数 getpid是一种函数功能是取得进程识别码许多程序利用取到的此值来建立临时文件以避免临时文件相同带来的问题。 getpid()函数需要引入的头文件有stdio.h、unistd.h和sys/types.h。 调试程序代码如下 #include iostream #include cstdlib #include windows.h #include stdio.h #include unistd.h #include sys/types.h using namespace std;int main() {srand(getpid())while(1){coutrand()endlSleep(1000); } } 分别执行两次程序生成的伪代码随机数序列也不相同结果如下 5721 5487 18939 28251 29922 6470 2914 16807 14781 32440 28228 15685 28899 30711 4193 17378 25105 4253 4132 15548 3930 16509 23440 17039 getpid函数与time(NULL)函数不同之处是 第一、time(NULL)获取的是时间戳值所以与程序的进程无关无论进程相同还是不同只要调取函数的时间不一样那么生成的seed值就不一样。 第二、getpid函数是程序的进程识别码所以在同一个程序的进程内多次调用函数生成的seed值是一样的。只有在不同的进程内调用seed值才会改变。 三、rand()函数的扩展功能 1、生成0~n(n1)随机整数 rand()函数生成的随机数范围为0~32767那么要想让范围变为0~m(m32767)只需要用rand()对m1求余即可。 #include iostream #include cstdlib #include ctime #include windows.h #include stdio.h #include unistd.h #include sys/types.h using namespace std;int main() {int m;cinm; // srand(getpid());srand(time(NULL));while(1){coutrand()%(m1)endl;Sleep(1000);}} 2、生成n~m(nm,m-n1)范围内的随机整数 要想让rand()函数生成的随机数范围为n~m(nm,m-n1)只需要用rand()对(m-n1)求余再加n即可。 #include iostream #include cstdlib #include ctime #include windows.h #include stdio.h #include unistd.h #include sys/types.h using namespace std;int main() {int m,n;cinnm; // srand(getpid());srand(time(NULL));while(1){coutrand()%(m-n1)nendl;Sleep(1000);}} 未完待续
http://www.dnsts.com.cn/news/66733.html

相关文章:

  • 投资公司注册资金要求百度地图关键词排名优化
  • 机关门户网站app建设思考wordpress 仿主题
  • 什么是网站运营主播网站怎么建设
  • 建一个网站需要什么搜索引擎优化seo公司
  • 专业建网站设计公司怎么在百度上设置自己的门店
  • 做微信投票的网站商城网站建设4262
  • 网站建设官方网站wordpress增加赞赏
  • 芜湖效能建设网站新加坡网站建设
  • 深圳外贸网站建设公司宁波建站方案
  • 蓝色汽车配件公司网站 模板上线一个app需要多少钱
  • 网站建设工作会议上的讲话河北邯郸天气预报
  • 做图片网站赚钱吗全国通网站建设
  • 网站建设与维护典型案例做旅游的网站的需求
  • 网站设计如何在ps先做自己做的网站是怎么赚钱吗
  • 网站开发相关专业搜外seo视频 网络营销免费视频课程
  • 网站制作1中铁三局招聘学历要求
  • 前端开发常用网站寿光市网站建设
  • 农药化肥网站建设长沙网络公司排行榜
  • 如何做好网站seo优化免费的黄冈网站有哪些平台可以用微信支付
  • 济南网站建设外包公司哪家好asp网站做视频教程
  • 云建网站网址设计网站推荐视频
  • 贵州省城乡与建设厅网站免费网站制作三合一收款码
  • 制造企业网站的建设目标邢路桥建设总公司网站
  • c 网站开发实例教程网站怎么做电脑系统下载文件
  • 莆田网站建设培训a站为什么会凉
  • 淮北网站建设设计电子商务网站建设的定义
  • 深圳广告设计公司网站编程软件scratch免费下载手机版
  • 成立一个网站.网站建设的目标
  • 自建站模板个人网站建设方法和过程
  • 找公司做网站多少钱番禺人才网站