C中的随机数.pptVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C中的随机数.ppt

C中的随机数 rand():随机函数 要使用这个函数,需要: #include stdlib.h 它的作用就是随机取0到RAND_MAX之间的任何数。ANSI标准指出,RAND_MAX值是32767,也就是双字节整数的最大值。 一个例子 #include stdio.h #include stdlib.h void main() { int i; for(i=1;i=10;i++) printf(%d , rand()); } 这个程序的输出是: 41 18467 6334 26500 19169 15724 11478 29358 26962 24464 解释一下 上面的程序的输出乍一看还是很随机的,不过如果你多运行几遍,就会很失望地发现:每次输出的结果总是这10个数…… 实际上,rand()函数产生的是伪随机数。也就是给定一个整数作为种子,它可以帮我们计算接下来的N个数应该是什么,才算得上数学意义上的“随机性”。 刚才的例子,相当于用整数1作为种子生成的伪随机数列。使用函数srand可以指定随机数的种子,下面换一个种子试试: 再来一个例子 #include stdio.h #include stdlib.h void main() { int i; srand(0); /*换一个种子,不指定的时候默认1*/ for(i=1;i=10;i++) printf(%d , rand()); } 这个程序的输出是: 38 7719 21238 2437 8855 11797 8365 32285 10450 30612 再解释一下 如果每次都使用同一个种子,很显然,你还能得到同一个随机数列。如何让每次的数列更加随机一点呢? 答案是:用当前系统时间做种子。 当前系统时间可以用time函数的返回值得到,它其实就是一个大整数(long类型),其值表示从1970年1月1日00:00:00到当前时刻的秒数。所以更典型的使用随机函数的例子是: 随机函数的典型用法 #include stdio.h #include stdlib.h #include time.h void main() { int i; srand(time(NULL)); /*用当前时间做种子*/ for(i=1;i=10;i++) printf(%d , rand()); } 这个程序的每次输出就很随机了,某次结果可能是: 12069 1596 22303 29935 28999 9558 20114 154 10109 26958 扩展阅读-1 如果我们只想生成0-99的随机整数,一般的做法是使用模运算: rand() % 100 更一般地,只想生成[a,b]之间的随机整数,你可以用: a + rand() % (b-a+1) 如果要生成[0,1]之间的浮点数,可以这样: (double)rand() / RAND_MAX; 扩展阅读-2 如果要生成随机小写字母: a + rand() % 26 如果要生成随机大写字母: A + rand() % 26 如果要生成随机字母呢?思路很简单,可以分两次随机,先随机挑一下大小写,再随机挑一下字母: (rand() % 2 ? A: a) + rand() % 26 蒙特卡罗方法 蒙特卡罗方法又称统计模拟法、随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见‘的伪随机数)来解决很多计算问题的方法。 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机变量的某些数字特征,并将其作为问题的解。 求π的近似值 考虑平面的单位圆,截取其第一象限的1/4个圆,然后用一个顶点在原点,边长为1的正方形将其框住。 接下来,在正方形内随机生成N个点,可以证明这些点落在圆内的概率是: π/4。 下面我们利用这个结论,模拟上述生成点的过程,写一个C程序来近似求π的值。 #include stdio.h #include stdlib.h #include time.h #define POINTS 100000 void main() { int i, count=0; double x, y; srand(time(NULL)); for(i=0;iPOINTS;i++) { x = (double)rand() / RAND_MAX; y = (double)rand() / RAND_MAX; if (x*x+y*y1.0) count++; } printf(%f, coun

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档