📜  C / C++中的rand()和srand()

📅  最后修改于: 2021-05-26 00:23:38             🧑  作者: Mango

兰德()

rand()函数在C / C++中用于生成范围为[0,RAND_MAX)的随机数。

注意:如果使用rand()生成随机数而没有先调用srand(),则程序每次运行时都会创建相同的数字序列。

句法:

int rand(void): 
returns a pseudo-random number in the range of [0, RAND_MAX).
RAND_MAX: is a constant whose default value may vary 
\between implementations but it is granted to be at least 32767.

假设如果在循环中借助于rand()在C中生成5个随机数,那么每次我们编译并运行程序时,我们的输出都必须是相同的数字序列。

C
#include 
#include 
 
int main(void)
{
    // This program will create same sequence of
    // random numbers on every program run
 
    for(int i = 0; i<5; i++)
        printf(" %d ", rand());
   
    return 0;
}


CPP
// C program to generate random numbers
#include 
#include 
#include
 
// Driver program
int main(void)
{
    // This program will create different sequence of
    // random numbers on every program run
 
    // Use current time as seed for random generator
    srand(time(0));
 
    for(int i = 0; i<4; i++)
        printf(" %d ", rand());
 
    return 0;
}


注意:该程序将在每次运行程序时创建相同的随机数序列。
输出1:

453 1276 3425 89

输出2:

453 1276 3425 89

输出n:

453 1276 3425 89

srand()

srand()函数设置生成一系列伪随机整数的起点。如果未调用srand(),则设置rand()种子,就好像在程序启动时调用了srand(1)一样。种子的任何其他值会将生成器设置为不同的起点。

句法:

void srand( unsigned seed ): 
Seeds the pseudo-random number generator used by rand() with the value seed.

注意:伪随机数发生器只能在调用rand()和程序启动之前播种一次。每次要生成新一批伪随机数时,都不应重复播种或重新播种。

标准做法是使用对srand(time(0))的调用结果作为种子。但是,time()返回的time_t值每次都会变化,因此伪随机数会随每个程序调用而变化。

CPP

// C program to generate random numbers
#include 
#include 
#include
 
// Driver program
int main(void)
{
    // This program will create different sequence of
    // random numbers on every program run
 
    // Use current time as seed for random generator
    srand(time(0));
 
    for(int i = 0; i<4; i++)
        printf(" %d ", rand());
 
    return 0;
}

注意:该程序将在每次运行程序时创建不同的随机数序列。
输出1:

453 1432 325 89

输出2:

8976 21234 45 8975

输出n:

563 9873 12321 24132

srand()和rand()如何相互关联?

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。