欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-12 16:09:05
...
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);//输出随机数
 
}
 
}
相关标签: 理解