c语言之详解如何产生随机数
Vivian 2018-06-19 来源 : 阅读 1065 评论 0

摘要:在c语言编程中,我们经常需要用到各种随机数,下面我来简单谈谈随机数产生机理。希望对大家学习c语言有所帮助。

在c语言编程中,我们经常需要用到各种随机数,下面我来简单谈谈随机数产生机理。希望对大家学习c语言有所帮助。

原理:产生随机机数的原理是计算机根据一个值(一般称作随机种子),然后把这个值作为参数,在经过一系列的公式运算计算出一个值,这个值就是随机数。简单来说,就像 一个关于我们的数学函数,给定它一个x值(相当与随机种子),我们可以得到一个y值(相当与产生随机数),当下一次需要产生随机数时,将以上一次产生的随机数( y) 作为随机种子,进而产生一个新的 y2,这样不停循环........

在这里,我先介绍两个函数:

srand():利用这个函数,我们可以设置随机种子,通过设置不同的随机种子可产生不同的随机数;
rand():通过随机种子产生返回值,这个函数返回值即我们需要的随机数,有时候我们没有设置随机种子时,默认种子为1。

下面通过几个例子说明:

1. 不设置种子,使其产生随机数

[cpp] view plain copy
1. #include <stdlib.h>//rand()函数包含在stdlib.h这个头文件中  
2. int main()  
3. {  
4.     int a;  
5.     a = rand();  
6.     printf("随机数:%d\n",a);  
7.     return 0;  
8. }

  c语言之详解如何产生随机数


当你运行此程序时,你将会发现,无论你将程序运行多少次,它每次都是一个确定的值,那你可能就会有疑问了,不是随机值吗,为什么每次都是一个定值呢??答案是显而易见的,因为刚开头已经说 计算机产生随机值时,必须依靠随机种子,当没设置随机种子时,默认为1,这就导致每次的随机种子均为1,随机种子相同,随机值则必然相同。

因此,程序可进一步改造,下列程序可充分体现种子与随机的关系:

[cpp] view plain copy
1. #include <stdlib.h>//rand()函数包含在stdlib.h这个头文件中  
2. int main()  
3. {  
4.     int a = 0;  
5.     int b = 0;  
6.     a = rand(1);  
7.     printf("随机数:%d\n",a);  
8.     b = rand(2);  
9.     printf("随机数:%d\n",b);  
10.     return 0;  
11. }

 c语言之详解如何产生随机数

2. 上面尽管最后都产生随机数,但却不是一个好的产生随机数的方式,因为在我们大多数应用中,需要的随机数的次数时不确定的,比如人和计算机下五子棋或类似其他游戏时,这时我们需要找一个程序中每次都不一样的变量,来实现功能,比如下面这个我用程序每次运行时间的不同来当做随机种子,产生随机值:

[cpp] view plain copy
1. #include <stdio.h>  
2. #include <stdlib.h>//rand()函数包含在stdlib.h这个头文件中  
3. #include <time.h> //使用time函数必须引入 time.h 头文件  
4. int main()  
5. {  
6.     int a = 0;   
7.     srand((int)time(0)); //用time(0)来抓取目前时间,并强制类型转换成int型  
8.     a = rand();  
9.     printf("随机值:%d\n",a);  
10.     return 0;  
11. }

 c语言之详解如何产生随机数            c语言之详解如何产生随机数

     
显然,每次程序运行时间不可能相同,因此随机数不同。

3. 然而,在我们实际中,经常需要的随机数是在一个范围内,这个其实也简单,通过以上我们已经求出随机数了,将随机数对范围的右值加一求余,就可以得到0到右值内的随机数,这个道理很简单,因为对数求余,余数不可能大于右值。于是就得到0到右值的随机值。

只需要将上面对应位置改为如下:

[cpp] view plain copy
1. a = rand()%10;  //假设要计算机求得0到9的随机值

c语言之详解如何产生随机数

4. 同样的道理,如果我们要得到a到b之间的随机数,将上面改为:

[cpp] view plain copy
1. #include <stdio.h>  
2. #include <stdlib.h>//rand()函数包含在stdlib.h这个头文件中  
3. #include <time.h> //使用time函数必须引入 time.h 头文件  
4. int main()  
5. {  
6.     int a = 3;  
7.     int b = 8;  
8.     srand((int)time(0));   //用time(0)来抓取目前时间,并强制类型转换成int型  
9.     a = rand()%(8-3+1)+3;   //假设要计算机求得3到8的随机值,对5求余得到0到5之间的值,再对应相加 明显成了 3到8 之间的随机值  
10.     printf("随机值:%d\n",a);  
11.     return 0;  
12. }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程