【随机数】C语言中的rand()函数和srand()函数

目录

一:rand()函数

二:srand()函数 

其中:srand((unsigned)time(NULL))和srand((unsigned)time (0)的区别?

三:time()函数

四:对上面三个函数有所了解后,如何使用呢?

rand()函数随机数生成范围:


一: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函数哦~ 

有不对的请小伙伴们指正~

猜你喜欢

转载自blog.csdn.net/m0_57549888/article/details/124095587