关于随机函数的运用

随机函数很简单,只有一个:
rand()
该函数返回 0~32767 之间的一个整数。(不需要记住 32767 这个数字,大概知道这个范围就行了)
该函数在头文件 <stdlib.h> 中,使用前记得引用。

[简单测试]

在这#include <stdio.h>
#include <stdlib.h>

int main()
{
	int r;
	for(int i=0; i<10; i++)
	{
		r = rand();
		printf("%d\n", r);
	}

	return 0;
}里插入代码片

Copy
执行后,可以看到输出了 10 个随机数字。

[指定范围的随机函数]

实际中,我们经常要产生指定范围的随机函数,通常我们用求余数的办法。例如,产生 0~9 之间的随机数,只需要将任意产生的随机数除以 10 求余数即可。求余数的运算符号是 %,我们可以这样做:

r = rand() % 10;

修改前面的测试程序执行后可以看到,产生的数字都是小于 10 的。

如果是 1~6 之间的怎样求呢?
r = rand() % 6 + 1;

无论产生什么样范围的随机函数,都是通过各种运算将随机数的范围 [0, 32767] 修改为自己需要的范围
随机种子]

做了多次试验,我们会发现一个问题:虽然产生的数字是随机的,但每次产生的数字序列都一样。为了解决这个问题,我们需要用“随机种子”。(意思是每次产生的随机数都是固定的,亲测)
因此引入下一个函数
随机函数的产生原理简单来说,就是:前一个随机函数的值,决定下一个随机函数的值。

根据这个原理我们可以知道:只要第一个随机函数的值确定了,那么后面数字序列就是确定的。如果我们想的得到不同的数字序列,我们需要确定第一个随机函数的值,对于设置第一个随机函数的值,叫做设置“随机种子”。易知,随机种子设置一次即可。

扫描二维码关注公众号,回复: 9366000 查看本文章

设置随机种子的函数如下:
srand(种子);

通常,我们用当前时间来做随机种子:
srand( (unsigned)time( NULL ) );

因为使用 time 函数,所以记得引用 <time.h>。

[绘图中的应用]

来一个简单的程序,在屏幕上任意位置画任意颜色的点(按任意键退出):

在#include <graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

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

	initgraph(640, 480);

	int x, y, c;
	while(!kbhit())
	{
		x = rand() % 640;
		y = rand() % 480;
		c = RGB(rand() % 256, rand() % 256, rand() % 256);
		putpixel(x, y, c);
	}

	closegraph();
	return 0;
}`这里插入代码片
发布了9 篇原创文章 · 获赞 3 · 访问量 713

猜你喜欢

转载自blog.csdn.net/delete_bug/article/details/104239941