目录
其中:srand((unsigned)time(NULL))和srand((unsigned)time (0)的区别?
一:rand()函数
rand()函数:1.C语言中用来产生随机数
2.需要的头文件:stdlib.h
3.stdlib.h头文件中有宏#define RAND_MAX 0x7fff,会返回一个范围0-0x7fff的随机数,即最大是32767的一个数
4.rand()函数得原型
#include <stdlib.h>
int rand(void);
5.rand函数的调用
rand()函数每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有那么它会自动调用srand(seed)一次来初始化它的起始值。若之前没有调用srand(seed),那么系统会自动给seed赋初始值,即srand(1)自动调用他一次。(在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同)
二:srand()函数
srand()函数:1.需要的头文件:<stdlib.h>
2.srand()函数原型:
#include <stdlib.h>
void srand (usigned int seed);
3.这个函数需要提供一个种子
种子如果相同,产生的随机数也是相同的,为了使随机数随机化,就设置一个再变化的种子,如:
用时间做种子
srand(time(NULL))
我们产生随机数,用rand,srand函数时,主要的初始化方法
srand((unsigned int)time(NULL))
我们常常使用系统时间来初始化,使用time函数来获取系统时间,得到的值是一个时间戳,即从1970年1月1日0点到现在时间的秒数,然后将得到的time_t类型数据转化为(unsigned int)的类型,然后再传给srand函数。
如果仍然觉得时间间隔太小,可以在(unsigned)time(0)或者(unsigned)time(NULL)后面乘上某个合适的整数。 例如,srand((unsigned)time(NULL)*10)。
还有另外一种初始化种子的方法:
用进程的pid作为种子值seed,在同一个程序中,这样的种子的值是相同的。
srand((unsigned int)getpid())
(PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。操作系统里每打开一个程序都会创建一个进程ID,即PID。
PID是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是进程终止后PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。)内心os:应该是这样的吧,我百度的pid。
其中:srand((unsigned)time(NULL))和srand((unsigned)time (0)的区别?
一个是 srand(unsigned int) ;
一个是 time(long *t) ;
这里是把他们两个合在一起写,time函数的返回值作为srand函数的参数 ,而NULL就是time函数的输入参数 ,time 函数要求参数是一个指针,因此得用 NULL,NULL代表指针不知向任何变量,而 0 则是 int 型的,类型不符
如果非要用0, 也可以进行强制类型转换, srand((unsigned)time ( (long *) 0)) ;
三:time()函数
time()函数:1.需要的头文件<time.h>
2.time()函数原型:
time_t time(time_t *tloc);//time_t类型被定义为一个长整型
四:对上面三个函数有所了解后,如何使用呢?
rand()函数随机数生成范围:
[0-99]
int num = rand() % 100;
[1,100]
int num = rand() % 100 + 1;
最后+1和不+1的区别,+1的最小值是1,不+1的最小值是0
[3,9]
int 3+rand () % 7;
总结:
[m,n]
int m+rand()%(n-m+1);
要使随机数随机化,记得引用srand函数哦~
有不对的请小伙伴们指正~