用rand函数生成随机数

rand函数产生0~RAND_MAX之间的随机整数。

RAND_MAX一般为32767(根据编程环境有所差别)

用rand函数生成随机数_第1张图片

Initialize random number generator(srand是初始化随机数的生成器)。

暂且称函数srand的参数为种子。

因为种子固定了,rand所生成的伪随机数列也是固定的。如图,这是我在vs环境下的运行结果。种子是1,rand第一个生成的数一直是41,之后的伪随机数列也都相同,一直是41,18467,6334…………(rand函数的默认种子是常量1)。

用rand函数生成随机数_第2张图片用rand函数生成随机数_第3张图片

 所以需要改变srand的参数。(为了随机数而设置随机数,这看似矛盾,其实后者只要是连续变化的就行)

 而时间是连续变化的。我们可以用time函数来返回一个时间戳(一个数字)。

用rand函数生成随机数_第4张图片

 由于time函数的返回值是time_t,而srand的参数是unsigned int,强制类型转换一下就行。

得到

srand((unsigned int)time(NULL));

这样rand函数可以生成随机数了。

需要注意 srand((unsigned int)time(NULL));只要调用一次就够了,可能在那一秒时间戳是一样的,所以rand生成的值也一样。可以封装成一个函数

#include
#include
#include
void game()
{
	int input;
	do
	{
		scanf("%d", &input);
		printf("%d\n", rand());
	} while (input);
}
int main()
{
	srand((unsigned int)time(NULL));
	game();
	return 0;
}

用rand函数生成随机数_第5张图片生成的数字肯定是随机的。

 

P.S.

rand,srand   要引头文件#include  

time       要引头文件#include  

你可能感兴趣的:(c语言)