rand和srand的用法

独自空忆成欢 提交于 2019-12-28 01:21:48

rand和srand

在man手册里面有讲述到,rand,rand_r和srand 都是与这个pseudo-random number generator有关的
伪随机数字发生器,就是产生随机数的lor

SYNOPSIS
#include <stdlib.h>
int rand(void);
int rand_r(unsigned int *seedp);
void srand(unsigned int seed);

原型是上面那样描述的。

DESCRIPTION
The rand() function returns a pseudo-random integer in the range 0 to
RAND_MAX inclusive (i.e., the mathematical range [0, RAND_MAX]).
The srand() function sets its argument as the seed for a new sequence
of pseudo-random integers to be returned by rand(). These sequences
are repeatable by calling srand() with the same seed value.
If no seed value is provided, the rand() function is automatically
seeded with a value of 1.

描述里面说rand的返回值是一个0到RAND_MAX的数,给rand设置一个seed的话就默认seed为1。
如果每个seed都一样的话呢,那每一次产生的随机数也一样了。
所以要用srand来产生一个seed,然后rand用这个seed来产生随机数。

代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc,char *argv[])
{
	if(2 != argc)
	{
		printf("usage: ./a.out num\n");
		return -1;
	}
	
	printf("randmax = %d\n",RAND_MAX);
	int aa = atoi(argv[1]);
	int c = 0;
	time_t tloc;
	time(&tloc);
	printf("tloc = %ld\n",tloc);
	srand(tloc);
	int i =0;
	for(i=0;i<aa;i++)
		{
			c = (rand() % 10);
			printf("c = %d\n",c);
		}

	return 0;
}

atoi

代码里面涉及到了atoi这个函数,简单地讲就是可以把字符串类型转换成int型。

用time来作为传入srand的参数

因为时间是无时无刻都走的,用这个参数的话能够保证每一的seed都不一样,所以rand后的得到的随机数也不一样了

取余符号 %

顾名思义就是取余数。
依稀能够回想起,余数是不能大于被除数的,所以想得到一定范围的数值的话,可以把这个范围作为一个值,然后用原来的值对目标范围值取余,得到的数肯定比目标范围小了,就是余数不能大于被除数的原理。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!