随机函数rand()、srand()

一、随机函数

产生数的函数,库函数中系统提供了两个函数用于产生随机数: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; 
}

运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绵绵羊23333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值