C/C++语言中让电脑随机的在某个范围中的任一随机数

这是我在笔试中碰见的一题中一部分,这就就记录下来。举例,输出[1,3]中任一随机数。

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstdio>
 4 #include<ctime>
 5 
 6 
 7 int main()
 8 {
 9     srand((unsigned)time(NULL));
10 
11     int val = 0;
12     for (int i = 0;i < 50;i++)
13     {
14         val = (rand() % 3) + 1;
15         std::cout << i + 1 << " " << val << std::endl;
16     }
17     return 0;
18 }

代码中第九行是什么意思?

在C语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)

1)首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2)然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

归纳:要取得[a,b)之间的随机整数,使用(rand() % (b-a))+ a 或者(rand() * (b-a)) / RAND_MAX + a

Ref:

http://blog.csdn.net/qin_zhangyongheng/article/details/8033936

posted @ 2017-10-13 21:58  王大咩的图书馆  阅读(369)  评论(0编辑  收藏  举报