1、基本函数
- 所需要包含的头文件:
#include <stdlib.h>
- 取随机数所需要的函数是:
int rand(void);
void srand(unsigned int n);
2、使用方法
(1) rand()函数会产生0至RAND_MAX(其值大于等于36767)之间的伪随机数(pseudorandom); 计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。
例如:
for(int i=0; i<10; i++)
{
printf("%d ", rand()%10); //产生0至9的随机数;
}
编译运行,发现每次运行程序产生的随机数都是
一样的; 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“
伪随机数”。C语言中由于采用固定的序列作为"种子",所以每次运行所取的是同一个数。
(2) 为了产生不同的随机数列,需要srand函数来改变随机数“种子”。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把 时间作为srand()函数的种子,就可以避免重复的发生。如果调用rand()之前没有先调用srand(),就会导致每次运行产生的结果一样。
例如:
srand((unsigned)time(NULL)); //调用time()函数前必须包含头文件time.h
for(int i=0; i<10; i++)
{
printf("%d ", rand()%10);
}
该程序每次运行结果都不一样,因为每次启动程序的时间都不同。
(3)产生一定区间内的随机数:
(a,b) (rand()%(b-a+1))+a-1 [a,b) (rand()%(b-a))+a(a,b] (rand()%(b-a))+a+1 [a,b] (rand()%(b-a+1))+a
- 要取得0~1之间的浮点数,可以用:
- 如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:
rand() /((double)(RAND_MAX)/100
例如:
srand(time(NULL));
printf("%lf\n",(double)rand()/RAND_MAX);
3、例子:
- 程序示例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
//使用rand()函数产生伪随机数
printf("rand()函数产生的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand());
}
//使用rand()函数产生0-20伪随机数
printf("\n\nrand()函数产生1-20的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand()%20);
}
//使用rand()函数产生a-b的伪随机数a=3;b=42;(rand()%(b-a)+a)
printf("\n\nrand()函数产生3-42的伪随机序列 :\n");
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 39+3);
}
//关于浮点数可以使用RAND_MAX
//用时间作为种子,获得随机数
printf("\n\n获取真随机数:\n");
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
//采用时间作为种子是为了保证获得不同的随机序列
//我们会发现相同的种子可以获得相同的随机序列
printf("\n\n采用相同的种子获得相同的时间序列:\n");
printf("\n序列1的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
printf("\n序列2的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
printf("\n序列3的值:\n");
srand(1);
for (int i = 0; i < 10; i++) {
printf("%d ", rand() % 10);
}
return 0;
}
- 运行结果: