rand和srand 随机数 C语言
#include<stdib.h>//需要调用头文件
//功能 函数返回一个在0到RAND_MAX(32767)之间的伪随机整数。
//但是,rand()的内部实现是用线性同余法实现的,是伪随机数。当周期较长,因此在一定范围内可以看成是随机的。
int rand(void);
//rand生成小数,生成特定范围数值等功能,可参考这片博文。
rand函数使用 C语言
既然随机数的是根据一定的规律生成,那么我们传入不同的参数,则能使其产生不同的结果。(如果不调用srand(),相当于默认执行了srand(1));
结合下面代码理解
代码案例:
#define _CRT_SECURE_NO_WARNINGS //vs 2022的scanf输入时,确保输入没问题。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
printf("%d ", rand() % 100);//该行永远输出固定的值
srand(time(0));//设置随机种子的函数,也就是设置随机函数上一次的状态值
//time(0)将返回一个时间戳,可将其视为与当前时间相关的整形数字
printf("%d ", rand() % 100);//每次输出值不同
/*
第一个rand()输出运行结果均相同,这是因为我们没有设置随机种子,每次运行时
rand()函数所记录的起始值均相同,所以每次的输出值都相同
*/
return 0;
}
运行结果:
因此借用srand()重新播种
#include<stdlib.h>
void srand(unsigned seed);
//对于给定的种子seed,rand()会反复产生特定的随机序列;
//为了使得每次随机的结果均不相同,那么设置不同的参数,考虑将当前时间变量设置为种子
//srand只需要在函数开始时,调用一次就行了
srand((unsign int)time(NULL));//一般引入与当前时间有关的变量