Jun 9

 随机函数的实现

        在编程过程中经常要用到随机数,通过调用库函数rand()来产生随机数。在调用rand()函数前一般要先调用 srand (unsigned int seed)产生随机种子。seed的选取一般可以采用系统时间来设置。产生随机数的范围在0~RAND_MAX。RAND_MAX定义在stdlib.h,其值为32767。

        假如我们要产生10个0~10之间的随机数,可以通过以下方式

 

#include<stdlib.h>
#include<stdio.h>
#include<time.h>

main()
{
    int i,j;
    srand((int)time(0));
    for(i=0;i<10;i++)
    {
        j=rand()%10;
        printf(" %d ",j);
    }
}

 

        关于srand(unsigned int seed)函数和rand()函数是库函数提供给我们的接口,也可以定义自己的函数来模拟这两个函数的实现

 

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

unsigned long int next = 1;

void LJ_srand(unsigned int seed)
{
	next = seed;
}

int LJ_rand()
{
	next = next*1103515+12345;
	return (unsigned int)(next/65536)%32767;
}

main ()
{
	int i;
LJ_srand( time(NULL) );   
 for( i = 0; i < 10; i++ )      
	 printf( "Random number #%d: %d\n", i,
                 LJ_rand()%10);
}

 

rand()函数和srand()函数之间的通信是通过一个全局变量next来交互的,不调用srand()函数时,默认的next的值为1,那么每次产生的随机数是一样的。

参考c programing language