首先我们要对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. spring boot-16.使用redis做缓存

    spring boot 自动配置了多种 缓存管理器,按照下面的顺序查找,如果容器中有相应的组件,则使用相应的缓存管理器. Generic JCache (JSR-107) EhCache 2.x Ha ...

  2. [转帖]IIS7 应用程序池的 托管管道模式与集成模式小结

    IIS7 应用程序池的 托管管道模式与集成模式小结 https://www.jb51.net/article/26311.htm IIS7的一些问题. 关注脚本之家微信公众号(jb51net) 每周都 ...

  3. MySQL中的索引优化

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...

  4. wex5 windowDialog组件

    windowDialog组件可以实现页面跳转 xid:windowDialog src:$UI/lohas/detailedknowledge.w 父页:myknowledge.w Model.pro ...

  5. grunt接触

    grunt使用 以下内容均为已经安装好grunt,具体grunt的安装过程不述,可以参考grunt的相关资料. 1.项目初始化grunt 在项目文件夹的根目录下面,打开命令行grunt init,执行 ...

  6. 剑指offer-3:跳阶梯

    三.跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 分析 青蛙每一次跳跃只有两种选择:一是再跳1级阶梯到达第n ...

  7. python 解决cv2绘制中文乱码

    因为使用cv2.putText() 只能显示英文字符,中文会出现乱码问题, 因此使用PIL在图片上绘制添加中文,可以指定字体文件. 大体思路: OpenCV图片格式转换成PIL的图片格式: 使用PIL ...

  8. iOS 10 下 Plus 启动APP 导致Icon 铺满全屏问题

    1.解决方法,添加LacuchScreen 启动图需要手动适配 http://stackoverflow.com/questions/39571694/ipad-application-shows-a ...

  9. 深入理解Java的反射机制

    https://blog.csdn.net/u012585964/article/details/52011138 http://www.importnew.com/20339.html 一,java ...

  10. discuz论坛后台部分设置更改之后,清除了缓存网站前台不更新不生效的解决办法

    discuz论坛后台部分设置更改之后,清除了缓存但网站前台不更新不生效的解决办法 在config/config_global.php  把  $_config['memory']['eaccelera ...