首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明。
 
rand(产生随机数)
 
表头文件: #include<stdlib.h>
 
定义函数 :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每个数字被选中的机率是相同的。
 
范例:
 
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考
 
srand()*/
 
#include<stdlib.h>
 
main()
 
{
 
int i,j;
 
for(i=0;i<10;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<stdlib.h>
 
定义函数:void srand (unsigned int seed);
 
函数说明:
 
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
 
范例
 
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照*/
 
#include<time.h>
 
#include<stdlib.h>
 
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 <stdlib.h>
 
#include <stdio.h>
 
#include <time.h>
 
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( "   %6d\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( "   %6d\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罢了

随机数:rand()的更多相关文章

  1. 【编程开发】C语言中随机数rand使用注意事项

    [编程开发]C语言中随机数rand使用注意事项 标签: [编程开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:随机数在编程开发中非常重要,以C语 ...

  2. C/C++中产生随机数(rand,srand用法)

    计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子.(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535 ...

  3. C/C++随机数rand()和种子函数srand()

    在计算机编程中,常常要产生一个随机数.但是要让计算机产生一个随机数并不那么容易.计算机的执行,是以代码来进行的,所以并不可能像抽牌,扔骰子那样产生一个真正具有随机意义的数.只可能以一定的算法产生一个伪 ...

  4. C++随机数rand(), srand()

    c++产生随机数会用到rand(), srand()函数,下面总结两个函数特性和使用. 1. rand() #include <iostream> #include <cstdlib ...

  5. mysql 随机数 rand使用

    生成随机数 生成0-3的随机数 SELECT RAND() * 最大不会超过3, SELECT FLOOR(RAND() * ) 上面生成整数的值是0,1,2,3生成的随机整数是1,2,3的话,语句如 ...

  6. Fruit Ninja(随机数rand())

    链接:https://www.nowcoder.com/acm/contest/163/A来源:牛客网 题目描述 Fruit Ninja is a juicy action game enjoyed ...

  7. C++ 随机数rand()和srand()

    标准函数库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h中定义的一个整数,它与系统有关. 例如在我的机器上,RAND_MAX=32767.可以 ...

  8. C语言中生产随机数 rand()函数

    参考资料:C语言中产生随机数 一:如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdl ...

  9. 神奇的随机数rand()

    随机数在统计理论中占有很重要的地位,很多应用都需要用到他,系统自带的rand()函数产生的是伪随机数,所以该如何真正的随机数呢? 1.c语言中的时间函数 关于c语言我查到的两个比较好的博文是:http ...

  10. sql server 生成随机数 rand函数

    https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql?view=sql-server-2017 在某一个区间内生 ...

随机推荐

  1. 【DSP开发】ccsv6添加simulator功能

    ccsv5更新到ccsv6后,ti去掉了simulator功能,具体的说法是"CCSv6 does NOT have any simulators. Texas Instruments is ...

  2. 浅谈python中字典append 到list 后值的改变问题

    看一个例子 ? 1 2 3 4 d={'test':1} d_test=d d_test['test']=2 print d 如果你在命令行实践的话,会发现你改动的是d_test ,但是d 也跟着改变 ...

  3. css 命名 有的加# ,有的加点 ,有的没加。请问下都在什么情况下用的?

    [nav{}]这样的样式是给特定的标签直接定义样式时使用的,这个样式名称是跟标签是相对应的,比如我要给<p></p>这个标签设置样式,那我就可以直接写:p{样式}就可以,但是这 ...

  4. JS 截取字符的方法

    substr() 方法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符. stringObject.substr(start,length) start:必需.要抽取的 ...

  5. Editor placeholder in source code错误

    When you insert code via autocompletion (or via a code snippet, sometimes), there may be placeholder ...

  6. Spring Data Elasticsearch基本使用

    目录 1. 创建工程 2. 配置application.yaml文件 3. 实体类及注解 4. 测试创建索引 5. 增删改操作 5.1增加 5.2 修改(id存在就是修改,否则就是插入) 5.3 批量 ...

  7. day 03 int bool str (索引,切片) for 循环

    基础数类型总览 10203 123 3340 int +- * / 等等 '今天吃了没?' str 存储少量的数据,+ *int 切片, 其他操作方法 True False bool 判断真假 [12 ...

  8. Almost Increasing Array CodeForces - 946G (dp)

    大意: 定义几乎递增序列为删除不超过一个数后序列严格递增. 给定序列, 求最少改变多少个数能变为几乎递增序列. 跟hdu5256类似,

  9. Dynamic Compilation and Loading of .NET Objects

      This is another approach to dynamic compilation of objects and their usage via Interfaces. Introdu ...

  10. Jade学习(四)之结合node如何编译执行

    1.首先安装node 2.新建一个文件夹并进入该文件夹 3.安装jade 4.在新建的文件夹下新建js文件,写nodejs代码 5.在vscode中利用插件code runner直接执行js文件,输出 ...