关于生成随机数rand()和srand()函数详解(c/c++)

一.rand()函数

rand()函数需要用到头文件<stdlib.h>.

它的函数原型为

int rand(void);

它的主要作用返回介于 0 和 RAND_ MAX 之间的伪随机整数。

其格式如下:

a1=rand()%100;    //a1取值范围0-99
a2=rand()%100+1;   //a2取值范围1-100
a3=rand()%30+1985;   //a3取值范围1985-2014

例如:我们想输出7个2-10的随机数:

#include<iostream>
#include<stdlib.h>
using namespace std;
int main() {
	int n;
	for (int i = 0; i < 7; i++) {
		n = rand() % 9+2;
		cout << n<<endl;
	}
	return 0;
}

输出为:

7
10
9
6
10
3
5

注意:我们每输出一个随机数都要使用一次rand()函数,如上图所示。

但很快我们就发现了一个问题,我们每次运行代码时输出的随机数都是以上的这几个数字,并没有改变。为了克服这个问题我们可以设置一个种子(seed),如下。

二.srand()函数

srand()函数是配合rand()函数使用的,它是为了避免每次运行代码时生成的随机数相同。

它的函数原型为:

void srand(usigned int seed);

随机数时根据一定的规则生成的,传入一个参数,使其产生不同的结果。

例如:srand(11)和srand(12)产生的随机数是不一样的。

要确保每次程序启动时,传入不同的seed,那如何使每次传入的参数都不同呢?

在这里我们通常传入当时的时间,利用time()函数,其中time(NULL)指的是返回一个整数(头文件为<time.h>)。

(如果不调用srand()函数,相当于默认执行了srand(1))

对上面的代码做一下改动,代码如下:

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main() {
	int n;
	srand(time(NULL));
	for (int i = 0; i < 7; i++) {
		n = rand() % 9+2;
		cout << n<<endl;
	}
	return 0;
}

此时每次运行输出的数字都不同。注意:srand只需main()启动时运行一次就够了,不需要每次rand()之前都调用srand。

三.取小数的随机数

有两种方法:1.在生成随机数后➗100.0,转成小数。

例如我们想输出7个0.02-1.00的随机数:

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main() {
	double n;
	srand(time(NULL));
	for (int i = 0; i < 7; i++) {
		n = rand() % 99+2;
		n = n / 100.0;
		cout << n<<endl;
	}
	return 0;
}

运行结果:(不唯一)

0.53
0.68
0.12
0.82
0.44
0.54
0.19

2.使用RAND_MAX

RAND_MAX是 <stdlib.h> 头文件中的一个宏,表示rand()函数产生的随机数的区间上限(下线是0),它的值为32767。

例如,我们想输出0-1的小数:(随机数都➗生成随机数的最大数,所以一定在0-1范围内)

#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main() {
	double n;
	srand(time(NULL));
	for (int i = 0; i < 7; i++) {
		n = (double)rand()/RAND_MAX;
		cout << n<<endl;
	}
	return 0;
}

结果如下:(不唯一)

0.802423
0.310007
0.981811
0.429029
0.0603961
0.664449
0.605365

以上就是rand()函数和srand()函数的内容,希望大家喜欢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值