C/C++中的rand()和srand()用法指南

2021年3月11日17:53:59 发表评论 812 次浏览

rand()

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

语法如下:

int rand(void): 
returns a pseudo-random number in the range of 0 to RAND_MAX.
RAND_MAX: is a constant whose default value may vary 
between implementations but it is granted to be at least 32767.
// C program to generate random numbers
#include <stdio.h>
#include <stdlib.h>
  
// Driver program
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;
}

注意:

该程序将在每次运行程序时创建相同的随机数序列。

输出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(时间(0))

作为种子。但是, time()返回的time_t值每次都会变化, 因此伪随机数会随每个程序调用而变化。

// C program to generate random numbers
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
  
// 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()如何相互关联?

srand()设置rand用来生成"随机"数字的种子。如果你在第一次调用rand之前没有调用srand, 就好像你已经调用srand(1)将种子设置为1一样。

简而言之,

srand()—为rand()函数设置种子

.

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: