函数srand在C中

前端之家收集整理的这篇文章主要介绍了函数srand在C中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这段代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
    printf ("First number: %d\n",rand() % 100);
    srand ( time(NULL) );
    printf ("Random number: %d\n",rand() % 100);
    srand ( 1 );
    printf ("Again the first number: %d\n",rand() %100);

    return 0;
}

有以下输出

First number: 41
Random number: 13
Again the first number: 41

还有以下规则:

Two different initializations with the same seed,instructs the pseudo-random generator to generate the same succession of results for the subsequent calls to rand in both cases.

我理解这些词,但我只是不理解方法本身.为什么它再次回归41?它是随机的还是必须根据此代码在每种情况下返回相同的结果?

解决方法

如果在没有先调用srand()的情况下调用rand(),则行为就好像您使用1作为参数调用srand()一样.

此行为在原始C标准中定义.我没有它的完整副本,但是Open Group的POSIX标准是下一个最好的东西,因为它们包含完整的C标准(带有一些扩展):

http://www.opengroup.org/onlinepubs/000095399/functions/rand.html

The srand() function uses the argument as a seed for a new sequence of pseudo-random numbers to be returned by subsequent calls to rand(). If srand() is then called with the same seed value,the sequence of pseudo-random numbers shall be repeated. If rand() is called before any calls to srand() are made,the same sequence shall be generated as when srand() is first called with a seed value of 1.

对任何给定种子的rand()调用的实际结果是实现定义的,除了对于任何种子x,在生成器的种子化之后调用n到rand()必须返回相同的结果.因此,在执行实现时,在调用srand(1)之后,在第一次rand()调用时总是得到41,并且对于第二次rand()调用,您将始终获得相同的结果(无论它是什么),其他实现可能使用产生不同结果的不同算法.

猜你在找的C&C++相关文章