一、随机函数
产生数的函数,库函数中系统提供了两个函数用于产生随机数: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()0;即可 产生【1~100】之间则:int num=rand()0+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; }