- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
随机数的产生方法
瑞达路 水瓶酒窝哥
由于老师布置了产生随机数的作业,要求编一个程序能够产生0000到9999总共10000个不重复的随机数,可能大家在网上看了一些方法,都用了函数Rand与Brand的结合,可以产生10000个随机数,并且大家都是用公式(rand() % (b-a))+ a来约束产生随机数的范围和个数的,但是大家几乎忘了不能重复的要求,所以产生的随机数是有很多重复的,不能满足要求,鉴于这种情况,我把大众化随机数的产生方法以及自己的一点改进措施与大家共享如下:
可重复随机数的产生方法:
我们知道rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系列数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统。但是有一个函数srand()可以初始化这个种子函数。
1、函数rand()用法:
说明:rand是包含在头文件stdlib.h中,跟stdio.h是一个道理,具体运用方法如下:
代码:
# include stdio.h
# include stdlib.h
int 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的整数范围。0~RAND_MAX每个数字被选中的机率是相同的。
用户未设定随机数种子时,系统默认的随机数种子为1。
rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
Srand()的用法:
函数srand是包含在头文件stdlib.h中的。
用法: void srand(unsigned int seed)
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样,因此我们得想办法使得seed不断变化,才能使产生的随机数是真随机数。
程序例子如下:
# include stdio.h
# include stdlib.h
# include time.h
int main()
{time_t t;
srand((unsigned)time(t));//引用函数srand,产生不同的种子数
FILE *f;
int i,j,a[10000];
f=fopen(d:\\1234.txt,wt);
//将产生的随机数写入d盘中的1234.txt文档中方便查看
if(f==NULL)
{
printf(文件打开失败!\n);
return 0;
}
else
{
printf(文件打开成功!\n);
for(i=0;i10000;i++)
{a[i]=rand()%10000;
fprintf(f,%4d ,a[i]);
}printf(文件写入成功!\n);
i=fclose(f);
if(i==0)printf(文件关闭成功!\n);
else printf(文件关闭失败!\n);}
return 0;
}
程序在编译器中的运行截图如下:
运行完程序后在d盘中找到1234.txt文档,打开便看到产生的10000个随机数
这里产生的随机数是从0~9999的可重复随机数,并且
用到下列公式:
要取得[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)。
要取得0~1之间的浮点数,可以使用rand() / double
您可能关注的文档
- C程序设计考试题和答案.doc
- C第3步:国内机票代理商系统操作培训考核.docx
- C第7章习题解答new.doc
- C类对应的内存结构.doc
- C自定义控件从入门到精通.doc
- C证面试心理健康辅导活动课设计.doc
- C语言-第八章函数.doc
- C语言32个关键字9种控制语句34种运算符.doc
- c语言c算数表达式求值.doc
- C语言win32实现俄罗斯方块.doc
- 2023年度华为认证题库试题带答案详解(预热题).docx
- 2023年度华为认证通关题库含答案详解.docx
- 2023年度华为认证自我提分评估及完整答案详解(必刷).docx
- 2023年度华为认证试卷附参考答案详解【培优A卷】.docx
- 2023年度华为认证考前冲刺试卷附完整答案详解【历年真题】.docx
- 2023年度华为认证过关检测试卷带答案详解(能力提升).docx
- 2023年度华为认证高频难、易错点题及答案详解(基础+提升).docx
- 2023年度华为认证考前冲刺试卷含答案详解(突破训练).docx
- 2023年度国家电网招聘考试考试综合练习附完整答案详解【历年真题】.docx
- 2023年度国家电网招聘考试题库试题及参考答案详解(B卷).docx
文档评论(0)