C语言:srand函数与rand函数的使用(纯干货)【易懂】
前言:在编写代码过程中,常常需要随机值来进行开发,在C语言中通常采用rand函数与srand函数组合使用的方法获取随机数。
一、rand()
来自https://www.cplusplus.com/reference/cstdlib/rand/的定义:
int rand (void);
Generate random number. //获取随机数
Returns a pseudo-random integral number in the range between 0 and RAND_MAX. //返回介于0和RAND_MAX之间的伪随机整数
头文件:#include<stdlib.h>
首先要明确的是,rand函数所产生的是一种伪随机数,其通过线性同余法计算出随机数。其范围在0-RAND_MAX之间,范围至少是0-32767,不同编译环境下不同。
rand函数是需要srand配合使用的,若不使用则默认种子为1,导致rand()函数产生的随机值相同。
二、srand()
来自https://www.cplusplus.com/reference/cstdlib/srand/的定义:
void srand (unsigned int seed);
Initialize random number generator. //初始化随机数生成器
The pseudo-random number generator is initialized using the argument passed as seed. //使用作为种子传递的参数初始化伪随机数生成器
头文件:#include<stdlib.h>
在使用时,在srand(seed)括号内添加种子,输入的seed不同,随机值不同。
三、time()
在使用中,为了避免手动输入以及实现真正随机值的产生,通常使用time()函数
来自https://www.cplusplus.com/reference/ctime/time/的定义:
time_t time (time_t* timer);
Get current time. //获取当前时间
Get the current calendar time as a value of type time_t. //获取当前日历时间作为time_ t类型的值
头文件:#include<time.h>
time()函数:通常用法为time(NULL)或time(0),函数会返回自1970年1月1日00:00:00走过的秒数(UNIX系统的Epoch时间),若在括号内设置参数,则保存到参数指针所指的变量中。
四、运用:生成一个1-100的随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand(time(NULL));
int random_num=rand()%100+1;//取模100,得到的是0-99,因此要+1
printf("%d\n",random_num);
return 0;
}
由此得到一个结论:要获取 [a,b] 的随机值,则随机数为a + rand() % (b - a+1)