随机函数

作为开篇总结学习,写博客的文章,有点小小兴奋得意,呵呵……刚做一个基于短信的课程设计,

其中涉及到了随机函数,思而再三,觉得是应该总结一下。。。

C语言中实现随机函数,主要有这么两个函数:rand()函数 和 random()函数,

其中random() 不是ANSI C 标准的,所以它不能在gcc 、vc等编译器下编译。

首先,对于rand()函数,其函数原型如下:

作用:随机函数发生器

用法:int rand(void);

#include<stdlib.h> 

#define MULTIPLIER 0x015a4e35L 

#define INCREMENT 1 

static long Seed = 1; 

int rand(void) 

Seed = MULTIPLIER*Seed + INCREMENT;

return ((int)(Seed>>16) & 0x7fff); 

//Seed>>16 将seed向右移16位,seed为4字节long型,只取高16位

//& 0x7fff,0x7fff转成2进制是0111111111111111;作用:把整数变为正整数

}

因此,函数int rand( void )返回一个界于0~32767(0x7fff)之间的伪随机数,包括0和32767C预先生成一组随机数

由于rand产生的随机数是从0到rand_max(即32767,而rand_max是一个很大的数,

那么要产生从X~Y的数需要这么做,rand() % (Y - X + 1) +X 。这样就可以产生你想要的任何范围内的随机数了。

另外之所以叫做伪随机数,是因为C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,

因此使用rand()重复运行程序产生的随机数都是相同的。不过,可通过srand()函数来改变随机数表的指针位置(用seed变量控制)。

srand()函数的原型如下:

作用:初始化随机数发生器 

用法:void srand(unsigned seed); 

源程序: 

#include<stdlib.h> 

#define MULTIPLIER 0x015a4e35L 

#define INCREMENT 1

static long Seed = 1; 

void srand(unsigned seed) 

{ Seed = seed;}

这个函数是给随机数产生一个随机种子(seed),一般用time作种子,因为时间time的值每时每刻都不同,

种子不同,产生的随机数也不同。因此,要想产生不同的随机数,在使用rand之前需要先调用srand 。

最后加上一个例子,产生X~Y之间的随机数:

# include "stdio.h"

# include “” stdlib.h"

# include “time.h” /*需引用的头文件*/

srand((unsigned)time(NULL));//srand()函数产生一个以当前时间开始的随机种子

n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/ 


/*当然也可以自定义开始时间,如

time_t t;

srand((unsigned) time(&t));

*/ 


/*基于毫秒级随机数产生方法:

   #include<windows.h>
   种子设为:srand(unsigned int seed);
   srand(GetTickCount());

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值