随机数
生成随机数的函数
rand
int rand(void);
该函数会生成伪随机数,随机数范围在0~rand max直接,rand max是随着编译器变的,大部分编译器上是32767
rand函数需要调用头文件:stdlib.h
但因为rand函数生成的随机数是以一个种子为基准生成的,如果不改变种子,会出现第一次程序运行和第二次程序运行的结果会相同。
#include<Stdio.h>
#include<stdlib.h>
int main()
{
printf("%d\n",rand());
return 0;
}
srand
也是用于生成随机数
void srand(unsigned int seed);
程序调用rand之前要调用srand,所以通过改变seed参数可以改变rand函数的种子,从而出现不通序列的随机数。但随机的seed参数和随机rand,出现矛盾
time
时间是不断变化的,于是就非常适合作为种子来生成随机数
time函数可以调用时间
time_t time(time_t * timer);
time函数返回是1970年1月1日0分0秒到程序运行时间之间的差值,单位秒
返回类型是time_t类型,time_t类型本质上是32位或64位整型类型
timer参数如果不是null,而是指针变量,则将差值存在指定的内存中,即变量中
如果timer参数是null,则只返回差值。该差值也称作:时间戳
需要头文件:<time.h>
#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());
return 0;
}
srand函数不需要频繁调用,一次运行调用一次即可
随机数范围
rand() %100;//生成范围0-99的随机数
rand() %100+1;//%100的范围是0-99,%100+1就是1-100
100+rand() %(200-100+1)//范围是0-100,加上100就是100-200
//因此随机数的范围a-b
//a+rand() %(b-a+1);