C语言随机函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令.

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

srand((unsigned)time(NULL)); /*随机种子*/

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

int rand(void)

函数int rand( void );返回的是一个界于0~32767(0x7FFF)之间的伪随机数,包括0和32767。C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。

void srand( unsigned int seed )

改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。

一直被这个东西弄得模糊不清,终于又去整理了一下.弥补一些细节

主要是对rand()函数的使用//#include

原型int rand(void);

例如:void myrand(int imax)

{

assert(imax>0);

int num = rand();

if(num<=imax)

{

return num;

}

else

{

return (num%imax);

}

}

功能产生0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义.

像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法.

srand()函数:

原型: void srand(unsigned seed)

功能: 产生随机数的起始发生数据,和rand函数配合使用

头文件: stdlib.h time.h

例:

#include

#include

#include

int main(void)

{

int i;

time_t t;

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

printf("Ten random numbers from 0 to 99\n\n");

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

printf("%d\n", rand()%100);

return 0;

}

运行时你会发现,的确产生随机了.所以,只要在每次调用rand()函数之前调用srand()函数就可以了.当然,可以看到,刚刚这个例子中我们用到了time.h函数. 因为srand()播下随机种子的时候.用到了int

time(time_t t).但这样似乎有点复杂,下面还有更简洁的函数. randomize()函数:

原型: int randomize(void)

功能: 通过time函数来得到一个随机数

头文件: stdlib.h time.h

该函数就相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h。

如果你要取得两个数之前的随机数值,除了对文章开头的例子作适当的修改外.还可以像如下编写程序:

return rand()%(second-first+1)+first;

以上所说的每次都随机.并不能排除相同的情况再一次出现.比如在输出的100个随机数中.有可能有一个数要出现多次.这就需要重新加上一些限制条件来解决.当然,也有许多编译器的库实现了这样的功能.但为了让程序适用于多种平台.用rand()自己实现出来的函数比较适用.至于各种平台上对应的随机函数.也是通过对它进行封装的.

以上都只对产生整数形式的作了讨论.文章开始就说了.我们产生的是0到RAND_MAX之间的整数.那我们如果想产生随机小数又如何做呢.这里我想出了一些办法.也许还有更好的方法.也希望大家给出建义.

float k = (float) rand()/RAND_MAX; //这就产生了一个0-1之间的随机小数

那如果我们要产生0-10之间的随机小数.那只要k*10就可以了.以此类推

若要产生x y之间的随机小数.那么只要float k = (float) rand()/RAND_MAX 然后再执行

k*(y-x) + x; 就可以了.

方法有很多种.并且都是很简单的编程实现.要看大家有没有想到了.

相关文档
最新文档