首先我们要对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罢了

rand和srand的用法相关推荐

  1. 【C++】random随机数与【C++11】/rand()和srand()的用法

    文章目录 随机数 1. c++ 11 random随机数的使用(推荐使用) 1.1 1.2 1.3 1.4 2.1 C++中随机函数rand()和srand()的用法(老本版) 2.2 限制随机数的范 ...

  2. 随机数rand和srand的用法

    有关于rand函数跟srand函数的用法 #include <stdio.h> #include <math.h> int main(){printf("%d\n&q ...

  3. C++中随机函数rand()和srand()的用法

    一.rand() 函数名:   rand      功   能:   随机数发生器    用   法:   int rand(void); 所在头文件: stdlib.h 函数说明 : rand()的 ...

  4. rand和srand的用法(转载)

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include<stdlib.h&g ...

  5. 【C语言】C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  6. 第十章 结构体_C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  7. C语言随机数生成教程,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数,例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  8. 【知识】C语言随机数生成,C语言rand和srand用法详解

    在实际编程中,我们经常需要生成随机数.例如,贪吃蛇游戏中在随机的位置出现食物,扑克牌游戏中随机发牌. 在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随 ...

  9. C语言rand和srand函数的简单介绍和用法

    目录 介绍: 用法: 介绍: 在c语言中,我们想要在一个范围内随机生成一个数字,我们就需要用到rand函数,生成大小为0到32767的整数,但仅靠rand生成的数是伪随机的数,如下: 第一次运行n次: ...

最新文章

  1. Java生成pdf设置两行页脚_Itextpdf 5 html生成pdf 页眉页脚
  2. 交大c语言作业答案,西安交大c语言作业及答案详解.docx
  3. citrix协议ICA技术原理
  4. 杭州师范大学马云雕像被拆,校方回应!
  5. Flowable 数据库表结构 ACT_ID_MEMBERSHIP
  6. 【QT】QT从零入门教程(十一):QT自定义窗口
  7. Java并发系列—并发编程挑战
  8. CentOS中配置lvm存储
  9. Excel写入与保存openpyxl
  10. python qt刷新_Python Qt.SizeFDiagCursor方法代码示例
  11. 组合使用Memento模式与Command模式实现多级Redo和Undo
  12. 智慧教室系统服务器参数,智慧教室建设项目技术参数..doc
  13. 怎么训练 GAN 网络
  14. pyecharts 插入到 ppt
  15. 黄金自己怎么用计算计算机数,黄金分割点计算器
  16. MIB 浏览器的使用指导
  17. 文明与征服新套路,北条点火队
  18. c语言解除键盘锁定,笔记本电脑解除键盘锁定的常见方法
  19. 裁员、转型、突围,两图带你看懂交易所困局
  20. python—判断语句练习题05

热门文章

  1. 使用百度云GPU主机做深度学习
  2. ubuntu vi/vim退出文件
  3. 一文带你了解UI自动化测试框架
  4. 传奇私服中检查人物穿戴指定装备的两种方法
  5. Json字符串的转换
  6. python培训班昆明
  7. 怎么挑选一部适合自己的全景相机?
  8. 王阳明心学 量子物理_量子物理学论文的文本分类
  9. 电子商务顾客评论的热点话题分析(转)
  10. LSB利器-zsteg