函数rand()功能:用来产生随机数;
rand函数产生一个0到RAND_MAX的伪随机数,这里的RAND_MAX至少为32767。伪随机数在c语言中为整数;
例1:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n=10,i;
for(i=0;i<n;i++){
printf("%d ",rand());
}
return 0;
}
两次的运行结果都相同;
以上函数未设置随机数种子,显著的特征就是每次运行的结果都是以上运行结果所示的固定的随机数值。
在调用rand函数产生随机数前,必须先利用srand()设置好随机种子,不然rand在调用时会自动设随机种子为1。
srand函数
作用:来设置rand()产生随机数的随机种子。
头文件:<stdio.h>
定义函数:void srand (unsigned int seed);
参数seed是整数,可以利用time(0)或者geypid(0)的返回值作为seed。我们通常提供不同的seed来达到完全的随机,一般用实际用时间函数time(NULL)作为seed,这样达到时间值每秒都不同的目的。
函数还需要包含头文件:#include <time.h>
例2:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void srand(unsigned int);
int main(int argc, char *argv[]) {
int n=10,i;
srand(time(NULL));
for(i=0;i<n;i++){
printf("%d ",rand());
}
return 0;
}
运行结果:
较例1相比较运行结果达到了随机的目的;
剩下的问题就是如何设置某一固定范围的随机数:这里就涉及到了取余的概念;
如果我们想要某一范围为m的随机数群,可以用rand()%(m+1);这样就可以得到范围为0~m的随机数。
例3:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void srand(unsigned int);
//目的:得到目标为0~10的任意随机数;
int main(int argc, char *argv[]) {
int n=10,i;
srand(time(NULL));
for(i=0;i<n;i++){
printf("%d ",rand()%11);
}
return 0;
}
运行结果:
仅仅是在例2的基础上加一个"%(m+1)";
达到了预期的效果!
最后一个问题就是我们需要某一范围的随机数,比如:60~70,可以理解为需要十以内的随机数,然后加上60即可;
例4
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void srand(unsigned int);
//目标为60~70之间的任意随机数;
int main(int argc, char *argv[]) {
int n=10,i;
srand(time(NULL));
for(i=0;i<n;i++){
printf("%d ",rand()%11+60);
}
return 0;
}
time()函数
作用:返回一个值,即格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒。
time()函数的原型是time_t time(time_t *t),参数类型是time_t,是一个指向time_t诗句类型的指针。
指针有两种传参形式,一种是以地址的方式:time(&a1);
另一种就是参数为空指针:a1=time(NULL)或者a1=(0);将time()返回值赋给变量a1。
time函数引用(https://blog.csdn.net/jaylee123123/article/details/80986913)