C语言中互不相同随机数的应用研究.docVIP

C语言中互不相同随机数的应用研究.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中互不相同随机数的应用研究   摘要:文章对随机数的应用问题进行了详细的分析, 给出了一种实现的算法, 并用C语言实现。通过该问题的C实现, 可使学习者清晰地观测到解决该问题的全过程。   关键词:随机数; 算法; 随机排序   中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)30-0654-02      Applied Study on Different Random Numbers in C Language   ZHANG Zhi-feng, LV Ying   (Department of Computer Science, Laiwu Vocational Technology College, Laiwu 271100, China)   Abstract: The paper makes a detailed analysis of the random numbers application issue, and provides an algorithm for their application in C. Through this application, the learners can observe clearly the whole process of solving the problem.   Key words: random numbers; algorithm; random ordering      1 随机数产生的方法      在编程过程中,随机数有其广泛的应用价值。在C语言中,可以利用C语言中的种子函数srand()和伪随机函数rand()来实现。生成步骤如下:   1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;   2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间);   3) 根据需要多次调用rand(),从而不间断地得到新的随机数;   4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。   范例源程序如下:   #include   void main()   {   int i;   srand((unsigned)time(NULL));   i = rand();   Printf(%d,i);   }      2 实际应用      在c语言中,随机数的产生大致可以分为以下三种情况:1) n个任意的随机数的产生;2) 从n至n+m的m+1个随机数的产生;3) 从n至n+m互不相同的m+1个随机数产生。前两种实现比较简单,在现实生活中应用较少。第三种实现较为复杂,较有实用价值,比如彩票选号,随机排列等。下面以为随机为10个学生分配1-10十个座号为例说明。      3 算法分析      程序中学生对象必须有姓名和座号两个属性,不妨利用结构体来实现。生成座号方法有两种。   先说第一种。实现步骤如下:第一步:在结构体初始化时直接指定学生姓名,座号可暂定为0。第二步:利用随机函数生成学生座号,但生成的数值可能有重复。第三步:利用循环语句生成新的座号,每生成一个新的座号,均需和以前的座号比较,若有重复,则重新生成,直到生成数值和前面所有数值均不相同。   这个算法在座号先生成后判断。生成后立刻作比较,如重复则重新生成。因此,在逐个生成之后即达到了预期目标。这种事算法比较符合人们的逻辑,但需要重复比较,效率较低。   下面说第二种。实现步骤如下:第一步:在结构体初始化时直接指定学生姓名、座号,座号可暂定为0。第二步:定义一个一维数组a[10]存放1-10十个座号,且令a[i]=i+1。第三步:利用循环语句随机生成a数组的第某个元素,如果该元素不等于0,则成为学生的座号。第四步:a数组的第某个元素归零,重新利用循环和判断生成下一个座号。   第二种算法是先判断后生成。思路为先生成一个放置座号的数组,然后从中随机抽取,抽取后为防止重复,立即归零。与第一种算法相比,每次生成座号,只需判断是否为0即可,大大提高了程序执行的效率。   4 C语言实现   4.1 先生成后判断的程序实现   4.1.1 说明   1) 10个学生姓名分别为:A,B,C,D,E,F,G,H,I,J。   2) 10个学生的初始座号均为0。   3) 利用strand()函数和rand()函数产生随机数。   4.1.2编程   #include   struct student   {   

文档评论(0)

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

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

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档