C语言程序随机数的产生方法.doc_第1页
C语言程序随机数的产生方法.doc_第2页
C语言程序随机数的产生方法.doc_第3页
C语言程序随机数的产生方法.doc_第4页
C语言程序随机数的产生方法.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

随机数的产生方法 瑞达路 水瓶酒窝哥 由于老师布置了产生随机数的作业,要求编一个程序能够产生0000到9999总共10000个不重复的随机数,可能大家在网上看了一些方法,都用了函数Rand与Brand的结合,可以产生10000个随机数,并且大家都是用公式(rand() % (b-a)+ a来约束产生随机数的范围和个数的,但是大家几乎忘了不能重复的要求,所以产生的随机数是有很多重复的,不能满足要求,鉴于这种情况,我把大众化随机数的产生方法以及自己的一点改进措施与大家共享如下:1、 可重复随机数的产生方法: 我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。但是有一个函数srand()可以初始化这个种子函数。 1、函数rand()用法:说明:rand是包含在头文件stdlib.h中,跟stdio.h是一个道理,具体运用方法如下:代码:# include stdio.h# include stdlib.hint main()int k;k=rand();printf(%d,k);return 0;程序在编译软件中的运行截图过程如下:当运行这个程序时,我们会发现,产生的随机数永远都是一个值,例如我的电脑是41,这是因为计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)rand()返回一随机数值的范围在0至RAND_MAX 间。RAND_MAX的范围最少是在32767之间(int)。用unsigned int 双字节是65535,四字节是4294967295的整数范围。0RAND_MAX每个数字被选中的机率是相同的。 用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。2、 Srand()的用法: 函数srand是包含在头文件stdlib.h中的。用法: void srand(unsigned int seed) srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样,因此我们得想办法使得seed不断变化,才能使产生的随机数是真随机数。程序例子如下:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);/引用函数srand,产生不同的种子数FILE *f;int i,j,a10000;f=fopen(d:1234.txt,wt);/将产生的随机数写入d盘中的1234.txt文档中方便查看 if(f=NULL) printf(文件打开失败!n); return 0; else printf(文件打开成功!n);for(i=0;i10000;i+)ai=rand()%10000;fprintf(f,%4d ,ai);printf(文件写入成功!n);i=fclose(f); if(i=0)printf(文件关闭成功!n);else printf(文件关闭失败!n);return 0;程序在编译器中的运行截图如下:运行完程序后在d盘中找到1234.txt文档,打开便看到产生的10000个随机数这里产生的随机数是从09999的可重复随机数,并且用到下列公式:要取得a,b)的随机整数,使用(rand() % (b-a)+ a;要取得a,b的随机整数,使用(rand() % (b-a+1)+ a;要取得(a,b的随机整数,使用(rand() % (b-a)+ a + 1;通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。要取得01之间的浮点数,可以使用rand() / double(RAND_MAX)。问题:产生00009999的随机数代码(注意:不是09999)?程序代码如下:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);FILE *f;int i,j,a10000;f=fopen(c:随机数.txt,wt);if(f=NULL) printf(文件打开失败!n); return 0; else printf(文件打开成功!n);for(i=0;i10000;i+)ai=rand()%10000;if(0=ai&ai=9)fprintf(f,000%d ,ai);if(10=ai&ai=99)fprintf(f,00%d ,ai);if(100=ai&ai=999)fprintf(f,0%d ,ai);if(1000=ai&ai=9999)fprintf(f,%d ,ai);printf(文件写入成功!n);i=fclose(f); if(i=0)printf(文件关闭成功!n);else printf(文件关闭失败!n);return 0;注意:如果有些编者只想在屏幕上看到结果,而对文件的输入输出不熟悉,可看以下代码:# include stdio.h# include stdlib.h# include time.hint main()time_t t;srand(unsigned)time(&t);int i,j,a10000;for(i=0;i10000;i+)ai=rand()%10000;if(0=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论