rand和srand的用法

原创 2013年12月05日 17:03:24
首先我们要对rand&srand有个总体的看法:

srand初始化随机种子,rand产生随机数,下面将详细说明。
rand(产生随机数)
表头文件: #include
定义函数 :int rand(void)
函数说明 :
因为rand的内部实现是用线性同余法做的,他不是真的随机数,
只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。
在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
返回值:
返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。
若用unsigned int 双字节是65535,四字节是4294967295的整数范围。
0~RAND_MAX每个数字被选中的机率是相同的。
范例:
#include
void main()
{
int i,j;
for(i=0;i<100;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}
   执行:

9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6 //再次执行仍然产生相同的随机数
srand(设置随机数种子)
表头文件:#include
定义函数:void srand (unsigned int seed);
函数说明:
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,

通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
范例
#include
#include
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}

     执行:与rand范例比较

5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7
又或:
用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,比较好的做法是:
j=(int)(n*rand()/(RAND_MAX+1.0))

产生一个0到n之间的随机数
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;
}
除以上所说的之外,补充一点就是srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字。

MSDN中的例子。
// crt_rand.c
// This program seeds the random-number generator
// with the time, then displays 10 random integers.
//
#include
#include
#include
int main( void )
{
   int i;
   // Seed the random-number generator with current time so that
   // the numbers will be different every time we run.
   //
   srand( (unsigned)time( NULL ) );
   // Display 10 numbers.
   for( i = 0;   i < 10;i++ )
      printf( "  m\n", rand() );
  printf("\n");
  // Usually, you will want to generate a number in a specific range,
  // such as 0 to 100, like this:
  {
     int RANGE_MIN = 0;
     int RANGE_MAX = 100;
     for (i = 0;    i < 10; i++ )
      {
         int rand100 = (((double) rand() /
                        (double) RAND_MAX) * RANGE_MAX + RANGE_MIN);
         printf( "  m\n", rand100);
      }
  }

总结:
我们知道rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,
是根据一个数,我们可以称它为种了,为基准以某个递推公式推算出来的一系数,
当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,
当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,
为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是:
初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 
从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,
那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,是吧。
利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的,
对了,你知道time() 函数的功能是返回从1970/01/01到现在的秒数的吧,可能这个起始时间不正确,你查一下对不对吧,

C还提供了另一个更方便的函数, randomize()
原形是void randomize(),功能是用来始初rand() 的种子的初始值,而且该值是不确定的,
它相当于srand((unsign)(time(NULL)) 不过应注意的是randomize()的功能要通过time来实现所以在调用它时头文件要包含time.h罢了
版权声明:本文为博主原创文章,未经博主允许不得转载。

C++中的srand()和rand()用法解析

C++中的srand()和rand()用法解析
  • u012333003
  • u012333003
  • 2014年03月04日 21:16
  • 1544

产生随机数————srand函数与rand函数的使用

rand()的使用方法,srand(value)的使用方法,rand()与srand(value)的关系,rand()产生随机数的原理与细节分析...
  • zl_130
  • zl_130
  • 2016年08月22日 18:02
  • 1481

随机数不随机呀——rand()与srand()

写程序,经常会用到随机数,但是,真正理解的貌似不多吧。 先看几个程序和运行结果吧: #include #include #include using namespace std; void fun(...
  • qq1184810369
  • qq1184810369
  • 2013年11月05日 14:31
  • 2160

关于rand和srand函数使用的一点心得

在C语言里面,两个函数包含在头文件里面,c++里面,标准库(被包含于中).   srand函数是随机数发生器的初始化函数。         原型:void srand(unsigned...
  • lovemysea
  • lovemysea
  • 2017年04月13日 20:39
  • 440

C++中用rand()和srand()产生为随机数方法介绍

http://www.cnblogs.com/gamesky/archive/2012/08/21/2648600.html 标准库(被包含于中)提供两个帮助生成伪随机数的函数:   ...
  • SMF0504
  • SMF0504
  • 2016年08月10日 20:07
  • 1165

srand()以及rand()函数用法

srand()就是给rand()提供种子seed 如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的, srand(n) for(10) rand()...
  • hezikui1987
  • hezikui1987
  • 2013年06月29日 18:03
  • 575

srand()以及rand()函数用法

rand(void)用于产生一个伪随机unsigned int 整数。  srand(seed)用于给rand()函数设定种子。 srand 和 rand 应该组和使用。一般来说,srand 是对...
  • xzhdy
  • xzhdy
  • 2013年05月18日 11:09
  • 430

<stdlib.h>中的随机数产生函数rand,random,srand,srandom的一些知识

1、int rand()产生一个从0到最大整数之间的一个随机数,但是每次程序启动后产生的随机数在时间顺序上都是一样的。 如: #include #include int main(){ ...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2013年05月24日 21:04
  • 3193

rand和srand的用法

首先我们要对rand和srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。 rand(产生随机数) 表头文件: #include 定义函数: int ...
  • muyimo
  • muyimo
  • 2013年10月11日 21:37
  • 371

rand和srand的用法

首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。rand(产生随机数)表头文件和定义函数 : #include int rand(void...
  • Brain011
  • Brain011
  • 2015年09月27日 03:39
  • 226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:rand和srand的用法
举报原因:
原因补充:

(最多只允许输入30个字)