随机函数很简单,只有一个:
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] 修改为自己需要的范围
随机种子]
做了多次试验,我们会发现一个问题:虽然产生的数字是随机的,但每次产生的数字序列都一样。为了解决这个问题,我们需要用“随机种子”。(意思是每次产生的随机数都是固定的,亲测)
因此引入下一个函数
随机函数的产生原理简单来说,就是:前一个随机函数的值,决定下一个随机函数的值。
根据这个原理我们可以知道:只要第一个随机函数的值确定了,那么后面数字序列就是确定的。如果我们想的得到不同的数字序列,我们需要确定第一个随机函数的值,对于设置第一个随机函数的值,叫做设置“随机种子”。易知,随机种子设置一次即可。
设置随机种子的函数如下:
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;
}`这里插入代码片