第四章 循环结构

两个黄鹂鸣翠柳,一行白鹭上青天。

伪随机数

每次调用rand()函数,返回一个随机整数,这个整数在0到RAND_MAX之间。

注意:使用rand()函数的时候要加上头文件 <stdlib.h>

先来看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <time.h>

int main (){

srand(time(NULL)); //给rand()函数传递一个种子
int chosen = 0;
chosen = rand(); //因为传递的种子是NULL,所以生成的随机数是不固定的
printf("生成的随机数是:%d", chosen);


return 0;
}

如果我们想要[a, b]之间的整数该怎么生成呢?

rand()函数是从0开始的,所以我们的随机数要加上 a 才能保证是从 a 开始

假设我们有一个变量limit使得 生成的随机数在[0, limit)区间之间,

然后我们将这个随机数加上a,得到一个新的区间[a, limit + a),

如果要生成在区间[a, b]中的随机数,则 limit + a = b + 1

所以 limit = b - a + 1;

下面是代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){

srand(time(NULL));
int a = 0;
int b = 0;
printf("请输入生成随机数的闭区间的起始值和结束值: \n");
scanf("%d %d", &a, &b);
printf("生成的随机数为:%d", a + rand()%(b-a+1));

return 0;
}