c程序设计语言 rand,VC随机函数srand和rand用法

前言:编程中经常需要用到随机数,当然程序(函数)本身无法生成所谓的真实的随机数,还需要一个随机种子,然后根据既定算法算出一个确定结果。如果我们只需要有限次或是随机数时间要求间隔比较久的,也可直接使用当前时间(时间戳)作为随机数。既然时间可以作为随机数,那么为什么还需要专门的随机函数呢?这就涉及到随机序列的概率分布问题,通过专门设计的随机函数可以保证连续随机数序列尽量贴近一均匀合理的概率分布。而不能像开彩那样,领导让开几就开几,那样重复概率太高了。

VC中随机函数最常用就是srand和rand(实际上是属于标准C函数),其中srand负责设置随机种子,rand则负责生成随机数。使用此二随机函数需要包含头文件。

一、srand和rand函数

1、srand函数

srand定义如下:void srand( unsigned int seed );

其中seed为无符号整数,我们一般使用时间戳作为其参数,取得时间戳,需要包含头文件。应用示例参下文。

2、rand函数

rand()函数产生一个介于0~RAND_MAX之间的伪随机整数(short型),RAND_MAX宏定义为0x7fff。如需要更大的随机整数,可使用多个随机整数进行组合运算即可得到。

二、随机数生成示例

#include

#include

#include

void main( void )

{

int i,r;

srand( (unsigned)time( NULL ) );

for( i = 0;i < 10;i++ ) {

r=rand()%10;

printf( " %3d\n", r);

}

}

使用注意:

1、rand生成序列对于给定的srand种子来说,序列值组合是固定的

2、srand值在快速调用时,time(NULL)可能不会更新,因为时间戳是以微秒计算的,所以微秒之内的如果再次执行srand和rand,则会得到相同的随机值序列

3、每次设置随机种子后,rand输出会自动复位到第一个初始值,种子相同,则初值及后续的序列相同

示例如下:

#include

#include

#include

int foo() {

int r;

srand( (unsigned)time( NULL ) );

r = rand()%100;

return r;

}

void main( void ) {

int i,r;

srand((unsigned)time(NULL));

for( i = 0; i < 10;i++ ) {

r=rand()%100;

printf( " %3d", r);

}

printf("\n");

for(i=0; i<10;i++) {

printf( " %3d", foo());

}

printf("\n");

}

输出如下(可注意到第二行输出完全相同):

76 69 10 95 37 85 25 99 4 33

76 76 76 76 76 76 76 76 76 76

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值