c语言程序随机数的产生方法

c语言程序随机数的产生方法

ID:6715954

大小:284.50 KB

页数:9页

时间:2018-01-23

c语言程序随机数的产生方法_第1页
c语言程序随机数的产生方法_第2页
c语言程序随机数的产生方法_第3页
c语言程序随机数的产生方法_第4页
c语言程序随机数的产生方法_第5页
资源描述:

《c语言程序随机数的产生方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、随机数的产生方法瑞达路水瓶酒窝哥由于老师布置了产生随机数的作业,要求编一个程序能够产生0000到9999总共10000个不重复的随机数,可能大家在网上看了一些方法,都用了函数Rand与Brand的结合,可以产生10000个随机数,并且大家都是用公式(rand()%(b-a))+a来约束产生随机数的范围和个数的,但是大家几乎忘了不能重复的要求,所以产生的随机数是有很多重复的,不能满足要求,鉴于这种情况,我把大众化随机数的产生方法以及自己的一点改进措施与大家共享如下:一、可重复随机数的产生方法:我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个

2、伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。但是有一个函数srand()可以初始化这个种子函数。1、函数rand()用法:说明:rand是包含在头文件stdlib.h中,跟stdio.h是一个道理,具体运用方法如下:代码:#include"stdio.h"#include"stdlib.h"intmain(){intk;k=rand();printf("%d",k);return0;}程序

3、在编译软件中的运行截图过程如下:当运行这个程序时,我们会发现,产生的随机数永远都是一个值,例如我的电脑是41,这是因为计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意:小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们又重复出现了。)rand()返回一随机数值的范围在0至RAND_MAX间。RAND_MAX的范围最少是在32767之间(int)。用unsignedint双字节是65535,四字节是4294967295的整数范围。0~RAND

4、_MAX每个数字被选中的机率是相同的。用户未设定随机数种子时,系统默认的随机数种子为1。rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。2、Srand()的用法:函数srand是包含在头文件stdlib.h中的。用法:voidsrand(unsignedintseed)srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样,因此我们得想办法使得seed不断变化,才能使产生的随机数是真随机数。程序例子如下:#include"std

5、io.h"#include"stdlib.h"#include"time.h"intmain(){time_tt;srand((unsigned)time(&t));//引用函数srand,产生不同的种子数FILE*f;inti,j,a[10000];f=fopen("d:\1234.txt","wt");//将产生的随机数写入d盘中的1234.txt文档中方便查看if(f==NULL){printf("文件打开失败!");return0;}else{printf("文件打开成功!");for(i=0;i<10000;i++){a[i]=rand()%1000

6、0;fprintf(f,"%4d",a[i]);}printf("文件写入成功!");i=fclose(f);if(i==0)printf("文件关闭成功!");elseprintf("文件关闭失败!");}return0;}程序在编译器中的运行截图如下:运行完程序后在d盘中找到1234.txt文档,打开便看到产生的10000个随机数这里产生的随机数是从0~9999的可重复随机数,并且用到下列公式:要取得[a,b)的随机整数,使用(rand()%(b-a))+a;要取得[a,b]的随机整数,使用(rand()%(b-a+1))+a;要取得(a,b]的随机整数

7、,使用(rand()%(b-a))+a+1;通用公式:a+rand()%n;其中的a是起始值,n是整数的范围。要取得a到b之间的随机整数,另一种表示:a+(int)b*rand()/(RAND_MAX+1)。要取得0~1之间的浮点数,可以使用rand()/double(RAND_MAX)。问题:产生0000~9999的随机数代码(注意:不是0~9999)?程序代码如下:#include"stdio.h"#include"stdlib.h"#include"time.h"intmain(){time_tt;srand((unsigned)t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。