产生随机数
有的时候,我们需要一些随机数来方便我们的工作,例如排序时数据的输入十分繁琐,调用产生随机数的函数则可以大大方便我们对程序的调试。以下为一段产生随机数的代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define NUM 10
int CreateData(int a[],int n,int min,int max)
{
int i,j,flag;
srand(time(NULL));
if((max-min+1)<n)
return 0;
for(i=0;i<n;i++)
{
flag=1;
while(flag)
{
a[i]=(max-min+1)*rand()/(RAND_MAX+1)+min;
flag=0;
for(j=0;j<i;j++)
if(a[i]==a[j])
{
flag=1;
break;
}
}
}
return 1;
}
int main(int argc, char *argv[])
{
int i,min,max,a[NUM];
scanf("%d %d",&min,&max);
CreateData(a,NUM,min,max);
for(i=0;i<NUM;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
本例中CreateData为产生随机数的函数,CreateData(a,NUM,min,max);一句中,a为数组名,NUM为要产生的数据的数量(通过编译预处理已定义为10),min和max分别为要产生的这NUM个数的最小值与最大值。
在CreateData这个函数中,srand(time(NULL));一句中srand函数是随机数发生器的初始化函数,time函数提供种子,NULL表示一个空指针,这样是以当前系统的时间产生了一个随机数。
函数中a[i]=(max-min+1)*rand()/(RAND_MAX+1)+min;一句则满足了产生数在min和max之间这个条件。
rand()的使用产生了一个随机数;
RAND_MAX为这些随机数中的最大值;
故rand()/(RAND_MAX+1)取值区间为(0,1);
(max-min+1)为要获取的数据的取值区间大小;
(max-min+1)*rand()/(RAND_MAX+1)的大小满足<max-min;
故(max-min+1)*rand()/(RAND_MAX+1)+min产生了一个在min和max之间的数;
为了满足某些排序的需要,我们设置不允许产生相同的数,因此就有了以下代码,当然你也可以修改:
for(j=0;j<i;j++)
if(a[i]==a[j])
{
flag=1;
break;
}
以上则为整个产生随机数的代码,加入你的头文件中,也许可以让你更加便利。
评论