C语言中的随机数 srand ( ) 和 rand ( )

在C语言中,生成一个随机数,一般利用两个函数,即void srand ( unsigned int seed ) 和 int rand ( void )。

    srand() 函数用于生成一个随机数种子,种子的值等于参数seed,这个参数由我们指定一个数、式子或者函数值。而 rand() 函数根据这个随机数种子进行运算生成一个[ 0 , RAND_MAX (int或 unsigned int最大值) ]范围内的随机数。

    在一个程序中只需运行一次srand函数即可,若参数seed是一个固定值,则同一程序中多次调用rand函数生成的数是随机数,但多次调用这一程序时,由于初始的随机数种子相同,所以生成的随机数列完全相同,因此一般使用系统时间函数time(NULL)(在time.h文件中,返回从1970年1月1日0点到现在的秒数的值)作为参数seed,使每次调用程序时的种子或者随机数列也具有一定的随机性。

    例如给int x 赋值为 [ 0 , 100 ) 的随机整数,先调用 srand(time(NULL)),再利用表达式x = rand()%100 即可。

    如果在一个程序在中,循环调用 srand(time(NULL)) 和 rand() 函数,由于现在计算机运行快速,两次循环的时间差不到1秒,使每次的随机数种子相同,从而生成的随机数也相同。即使在循环中加延时函数,由于时差不大,生成的随机数也相差不大,而且使程序运行时间大大增加。因此,一定要在循环外使用srand函数,一个程序中使用一次即可。

    如果对随机性要求较高,要避免采用取模操作%,这是为了避免在某些情况下,某些伪随机数生成器产生的数,低位不够随机的问题,此时应采用 x = (int) (100.0 * rand() / (RAND_MAX + 1.0)) ,生成一个 [ 0 , 100 ) 的随机浮点数,再将其转换为 int 型,从而得到一个 0 ~ 99 的随机整数。
--------------------- 
作者:日照万方 
来源:CSDN 
原文:https://blog.csdn.net/XSunrise/article/details/44874583 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qingzhuyuxian/article/details/84579755