编程时有时需要随机输入一些数,这是调用随机函数可以完成此相命令.   
# include “stdio.h”   
# include “stdlib.h”   
# 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<stdlib.h>
原型 int rand(void);
例如:void myrand(int imax)
      {
            assert(imax>0);
            int num = rand();
            if(num<=imax)
            {
                  return num;
            }
            else
            {
                  return (num%imax);
            }
    }c语言库函数
功能 产生 0到RAND_MAX之间的随机整数.至于RAND_MAX有多大,可以自己编程的时候输出.这是库里自带的宏定义.
像这样的一个函数,就产生了一个0到imax的随机整数.但是,当你多次运行你会发现,每一次产生的值都是一样的.并不是说没有随机,而是随机数发生器(程序产生的随机数是依靠时钟钟断来产生的.因此并不是真正意义上的随机.但对于我们来说,已经够用了)没有被重置.导致结果相同.那下面就看一下几种初始化随机数发生器的办法.
srand()函数:
  原型: void srand(unsigned seed)
  功能: 产生随机数的起始发生数据,和rand函数配合使用
  头文件: stdlib.h  time.h
  例:
  #include <stdio.h>
  #include <stdlib.h>
  #include <time.h>

  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; 就可以了.
方法有很多种.并且都是很简单的编程实现.要看大家有没有想到了.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。