C++ rand()和srand()的原理;

C++ rand()和srand()的原理;

rand()

rand()不需要任何参数,但是他会直接返回一个从0->最大随机数

的任意一个整数.

  • 如果想要产生0~99的随机数,可以表达为rand()%100;===>在任意产生的数中对100求余数
  • 但是如果想要产生1-100的随机数,可以表达为rand()%100+1;
  • int num=rand()%n+a;===>num的范围是a~(n-1)+a;

但是rand()只会产生一次,即便再次编译,结果仍旧不便;

那么就用到了srand();

srand()

void srand(unsigned seed)//此处类型是unsigned

参数seed是rand()的种子,用来初始化rand()的起始值。

可以认为rand()在每次被调用的时候,它会查看:

1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用srand(seed)一次来初始化它的起始值。

2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

#include<stdlib.h>//头文件包含rand和srand函数
 
#include<stdio.h>
 
#include<time.h>
 
void main()
 
{
 
int i,k;
srand((unsigned)time(NULL));//选取种子文件
 
for(i=0;i<20;i++)
 
 {
 
  k=rand()%100;//%100控制随机数的范围
 
  printf("k=%d\n",k);//输出随机数
 
}
 
}

猜你喜欢

转载自blog.csdn.net/weixin_45929885/article/details/113834933
今日推荐