浅析C 语言中的随机数的应用

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zhangzhao322
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文针对C 语言中的随机数生成以及使用方法进行分析和探讨,主要对各种随机数的生成算法进行设计。在C 中,随机数的生成主要通过函数文件中的ramt()和srand()函数。首先,阐述rarut()和srand()两种函数共同的使用方法和模式,并分析了各自的缺点,然后以现实中的问题和实际的题目为例,通过实际编程来阐释随机数生成函数的使用方法,实现了不同概率的随机数的产生、不连续的随机数的产生等方法。
  关键词:随机数;伪随机数;种子;随机数生成器
  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)08-0098-03
  1概述
  经过对C 语言的学习,笔者发现书中对于随机函数的使用只是一概而过,没有进行深入的阐释和联想。文献是到“其实计算机不会产生绝对随机的随机数,只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,计算机只能生成相对的随机数,即伪随机数。实际上,系统是将0~32767之间的整数“随意”地排成了一个“随机数表”,程序第一次调用rand()函数是取“随机数表”中的第一个,第二次调用rand()函数是取“随机数表”的第二个,由此类推。即使我们运行了多次,但都是在同一个系统上,而同一个系统产生的“随机数表”又始终是相同的,因此每一次运行的结果都是一样的。”现有文献大都集中在介绍随机函数的用法,本文从实际应用出发,分析和研究各种不同类型随机数的生成算法,并进行实验分析。
  2随机数的生成的原理(C 框架下)
  2.1C 中随机数的定义
  C 语言中使用cstdlib中的函数rand()进行生成,但生成的只是伪随机数。因为rand()的内部实现是用线性同余法做成的,生成随机数时,需要指定一个种子,用srand()来设置rand()产生随机数时的随机数种子,如果每次srand()都设相同值,rand()所产生的随机数值每次就会一样。通常可以利用time(0)的返回值或NULL来当做seed,这样可以输出不同的随机数。
  2.2随机数随机重现试验
  线性同余法产生对随机数是伪随机数,下面进行试验,测试具体伪随机数的特点。
  通过图1的实验结果,可以发现当给予相同的随机数函数种子时,他会输出相同的数字,这就是“伪随机数”名字的来历。为了设计出不同的随机函数,C 引入函数time(0)(电脑上确切的时间),用time(0)作为种子,可以实现随机数函数每次的种子都不同,从而产生出不同的随机数,让数字的产生更加接近随机。
  2.3验证伪随机数是否足够随机的实验
  通过图2,由此看出0-9的各个数字,当随机数数量足够多时,产生概率是近似相同的,因此Fang()函数产生的伪随机数是可以近似看作随机数的。
  3随机数常见的使用方法
  3.1随机数小数(不考虑进位)的产生
  随机数产生器rand()是根据其后%n中的n来确定产生的数字的,会产生出所有小于n的整形数字(包括0),由于c 语言中%(取余函数)只能输出整数,所以随机小数是不能直接产生的,必须运用其他方式。
  从图3可以看出,虽然rand()函数只能输出整数,但通过除法运算,可以输出小数,再加上整数就可以输出具有大于1的随机小数,通过实验结果可以证明算法的正确性。
  3.2随机数小数(考虑进位)的产生
  通过对rand()函数产生数据的数字类型变换从而为浮点数创造了可能,/10可以制造出一位小数,/100可以制造出两位小数,如果想随机输出3-5之间的小数只需要将%n中的n改为大于10的数字,通过小数点进位的方式来进行。例如:
  图4这为小数随机数(跨位数)的生成算法。
  分析:关于进位,可以看做是大于1的小数和整数的相加,通过rand()随机输出0-20的随机数,除以10后,便成为随机输出0.0-2.0之间的随机小数,加上3后成为随机输出3.0-5.0之间的随机数,根据实验结果,这种算法正确。
  3.3任意数的随机输出
  C 中rand()只能通过取余函数来进行模拟,如果要随机出特定的随机数,譬如1、4、5、9这四个随机数,我们可以通过if来进行筛选。
  分析:随机数只能连续输出,如果要输出特定的数字只能依靠if判断语句,进行随机数的筛选,如果是特定的数字就输出,不是就继续随机输出下一个数字。通过图实验结果证明这种算法正确。
  3.4不同比例随机数输出
  在实际生活中随机数的输出概率并不均等,那么依靠c 语言中,运用rand()函数仍可以进行输出,例如0、1、2、3、4、5、6这些数字,而0、1、2、3这三个数字比其他数字更容易输出50%。
  分析:第一個for循环按等比例输出随机数,第二个for循环通过再次随机输出特定相同数字相同的次数,通过判断语句,只打印比例多出来的数字,从而使特定数字多出50%的概率输出,通过实验结果,得出这种算法是正确的。
  3.5任意0、1串的输出
  在实际编程操作中,很多时候都要运用0、1串的输出。
  分析:运用for()循环进行具体次数的输出使字符串的输出更加方便。
  4小结
  我们在生活中也会遇到很多有关随机数的问题,如随机抽奖,随机点名等等。本文介绍了c 中随机数的使用以及产生带小数的随机数,进位的随机小数,随机输出不连续的数字,输出不同概率的随机数以及一种可以解微积分的方法,对一些实例进行了较为详细的解释,并对结果进行了分析,有助于更好的使用随机数函数,为现实生活中解决随机数函数问题打下现实基础。
其他文献
研究蔬菜纸片的加工工艺及工艺参数,试验以胡萝卜为原料,主要从成型和风味调配2方面对蔬菜纸片的加工过程进行探讨研究。试验结果表明胡萝卜纸片最适宜配方为:胡萝卜100 g,羧
随着电子技术的突飞猛进,如今的电脑无论在性能和功能上都达到了巅峰。电脑的使用周期也更长,很多三年前组装的主流电脑,如今玩起游戏仍不落后。然而,很多人由于不懂得“保养”电脑,导致电脑使用不到两年就出现各种问题,其实只要自己掌握一些技巧优化电脑,不仅可以让电脑使用体验更好,同时还能延长电脑使用寿命。一台大家认为只有三年使用周期的电脑,其实在精细呵护之下,可以将使用周期延长至五年甚至更长!  一、使用高
本文分析了高职院的校园文化现状,并阐述和探讨了高职院校园文化建设的重要性及建设校园文化的原则和基本途径.
在分析高职数学考核现状的基础上,阐述了数学考核方法改革的一些尝试.考核内容以"基础与能力"作为命题的轴心,重点考查支撑专业知识体系的主干知识,考核方法以"过程考试"与"