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);//输出随机数
}
}
上一篇: C++中关于map的一些知识点
下一篇: 用vector创建二维数组的方法;