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