目录
1.rand函数
想要实现随机数,c语言中为我们提供了rand函数。
int rand (void);
rand()
函数是一个用来生成伪随机数的函数。它返回一个范围在0到RAND_MAX
之间的整数,其RAND_MAX
是一个常量,代表了rand()
函数能够生成的最大随机数值。一般情况下,为32767.
rand函数的使⽤需要包含⼀个头⽂件是:<stdlib.h>
但是为什么称之为伪随机呢?我们来测试一下。
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
我们来运行一下,看看结果:
虽然一次运行中的5个数字是相对随机的,但是下⼀次运⾏程序⽣成的结果和上⼀次一模一样,这就说明有点问题。这就是我们所称的伪随机。
其实我们到cpluplus官网去看,可以发现
This number is generated by an algorithm that returns a sequence of apparently non-related numbers each time it is called. This algorithm uses a seed to generate the series, which should be initialized to some distinctive value using function
这个数字是由一个算法生成的,该算法在每次调用时都会返回一个明显不相关的数字序列。该算法使用种子来生成序列,每个种子对应的序列是固定的,而rand函数默认的种子是1,所以会导致伪随机的现象。
所以我们就需要另一个函数srand来改变种子的值,实现真正的随机。
2.srand函数
void srand (unsigned int seed);
srand()函数用于设置随机数生成器的种子,以便在调用rand()
函数时生成不同的随机数序列。
要使用srand()函数,你需要包含<stdlib.h>头文件。
srand()函数接受一个参数,通常是一个整数值,用作随机数生成器的种子。也就是说,只要种子在不断变化,就能产生真正的随机数。
所以我们要产生一个不断变化的整数(没必要随机,否则你需要一个随机数来实现随机数的生成,显然矛盾)。
3.time函数
在程序中我们⼀般是使⽤程序运⾏的时间作为种子的,因为时间时刻在发⽣变化的。
在C语⾔中有⼀个函数叫 time ,就可以获得这个时间,time函数原型如下:
time_t time (time_t* timer);
time 函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒。
返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型。
time函数的参数 timer 如果是非NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。 如果 timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。
time函数的时候需要包含头⽂件:<time.h>
如果只是让time函数返回时间戳,我们就可以这样写:
time(NULL);
4.生成随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
//使⽤time函数的返回值设置种⼦
//因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换
srand((unsigned int)time(NULL));
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
PS:截图只是当时程序运⾏的结果,你的运⾏结果不⼀定和这个⼀样.
5.随机数的范围
1.如果我们要生成0~99之间的随机数,方法如下:
rand() %100;//余数的范围是0~99
2.如果我们要生成1~100之间的随机数,方法如下:
rand()%100+1;//%100的余数是0~99,0~99的数字+1,范围是1~100
3.如果我们要生成100~200之间的随机数,方法如下:
100 + rand()%(200-100+1) //余数的范围是0~100,加100后就是100~200
4.如果我们要生成a~b之间的随机数,方法如下:
a + rand()%(b-a+1)