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