随机数的相关概念

来自:c和指针.P328

有些程序每次执行时不应该产生相同的结果,如游戏和模拟,此时随机数就非常有用。下面两个函数合在一起使用能够产生伪随机数。之所以如此称呼是因为它们通过计算产生随机数,因此有可能重复出现,所以并不是真正的随机数。

int rand( void );

void srand( unsigned int seed );

rand返回一个范围在0RAND_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;

         }

}

.

.

.

.

.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值