一、随机函数
产生数的函数,库函数中系统提供了两个函数用于产生随机数:srand()和rand()
二、伪随机数
伪随机数是在一定的数值范围内,由随机种子采用一定的算法计算出来一个数字做为结果显示,尽量保证算法公平使得产生的结果接近随机数。
其实rand 、srand是通过设定一个随机种子(数值形式)用来产生伪随机数的。
P:若使用的种子不变,只要计算方法一定,则伪随机数的数序也不变。
举例: *#include<iostream>
using namespace std;
int main(){
unsigned int seed=5;//unsigned 表示数据类型无符号
srand(seed);
unsigned int r=rand();
cout<<"r="<<r<<endl;
return 0;
}*
两次结果相同
三、种子
1、 随机种子来自系统时钟即计算机主板上的定时/计数器在内存中的计数值,
通常利用系统时间来改变系统的种子值srand(time(NULL))
2、头文件:time.h/ctime
3、 举例:*` #include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
srand((unsigned)time(NULL));
unsigned int r=rand();
cout<<"r="<<r<<endl;
return 0;
}`*
两次结果不同,感兴趣可以自己试一试
四、srand()函数
1、含义:是随机数发生器的初始化函数
2、头文件:stdlib.h/cstdlib
3、原型:void srand(unsigned int seed);//unsigned:无符号整型
4、用法:一般与rand()函数一起使用
通过参数seed改变系统提供的种子值(用来初始化函数的起始值)使得每次调用rand函数生成的伪随机数序列不同,实现真正意义上的随机。
五、rand()函数
1、头文件:stdlib.h/cstdlib
2、原型:int rand(viod);
int num=rand();
3、返回值:返回一个【0,RAND_MAX】间的随机整数
4、与srand配合原理:
系统在调用rand之前如果调用过srand,并且参数seed指定了一个值那么rand会将其作为初始值,而如果没有调用过那么其会将1作为初始值。当初始值seed 是定值又或者初始值是默认值1都代表是一个定值,这样会导致产生的随机数是一样的。
5、解决方案:前面有点绕哈,不过记住,产生一切的前提是初始值也就是种子值一定不可以是定值,有人又会有疑问一直一次次调用一次次设岂不是很麻烦? 所以,我们需要系统时钟的帮助,一般形式如下:
srand((ungined)time(0))
srand((ungined)time(NULL))//笔者一般用这个哈
6、 指定范围:在一些实际实验时,由于实际问题的需要我们要产生在一定 范围内的随机数
先举例:
要产生【0~99】100个整数则:int num=rand()%100;即可
产生【1~100】之间则:int num=rand()%100+1;即可
总结:
产生【a,b】范围则:int num=rand()%(a-b+1)+b
思想方法:
模除+加法
7、应用举例:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
srand((unsigned)time(NULL));
for(int i=0;i<10;i++){
unsigned int r=rand();
cout<<"r="<<r<<endl;
}
return 0;
}