一.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()函数的内容,希望大家喜欢。