somehow

产生随机数

有的时候,我们需要一些随机数来方便我们的工作,例如排序时数据的输入十分繁琐,调用产生随机数的函数则可以大大方便我们对程序的调试。

以下为一段产生随机数的代码:

#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;

}

以上则为整个产生随机数的代码,加入你的头文件中,也许可以让你更加便利。

评论

热度(2)