来自:c和指针.P328
有些程序每次执行时不应该产生相同的结果,如游戏和模拟,此时随机数就非常有用。下面两个函数合在一起使用能够产生伪随机数。之所以如此称呼是因为它们通过计算产生随机数,因此有可能重复出现,所以并不是真正的随机数。
int rand( void );
void srand( unsigned int seed );
rand返回一个范围在0和RAND_MAX(至少为32767)之间的伪随机数。当它被重复调用时,函数返回这个范围内的其他数。为了得到一个更小范围内的随机数,可以把这个函数的返回值根据所需范围的大小进行取模。为了避免程序每次运行时获得相同的随机数序列,我们可以调用srand函数。它用它的参数值对随机数发生器进行初始化。一个常用的技巧是使用每天的时间作为随机数产生器的种子。如下面的程序所示:
srand( ( unsigned int )time( 0 ) );
#include<stdio.h> #include<stdlib.h> #include<time.h>
#define TRUE 1 #define FALSE 0
//使用随机数在牌桌上洗牌。第二个参数指定牌的张数。当这个函数第一次调用时, //调用srand函数初始化随机数发生器 void shuffle( int *deck, int n_cards ) { int i; static int first_time = TRUE;
//如果尚未进行初始化,用当天的当前时间作为随机数发生器 if( first_time ) { first_time = FALSE; srand( ( unsigned int )time( NULL ) ); }
//通过交换随机对的牌进行洗牌 for( i = n_cards - 1; i > 0; i-- ) { int where; int temp;
where = rand() % i;
temp = deck[where]; deck[where] = deck[i]; deck[i] = temp; } } . . . . . |