C语言(rand函数)

(2006-09-24 20:41:59)

转载
   

srand()就是给rand()提供种子seed

1,先看一个例子
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
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() );
}

2.关于time.h
time.h中包含很多有趣的函数,譬如
char *ctime(long *clock)
本函数把clock所指的时间(如由函数time返回的时间)转换成下列格式的
字符串:Mon Nov 21 11:31:54 1983/n/0

#i nclude <iostream>
#i nclude <stdlib.h>
#i nclude <time.h>
using namespace std;

void main()
{
time_t t1,t2;
char getTime[20];
char *ptstring=getTime;

int x,count=0;
x=RAND_MAX;
cout<<<'/n';
t1=time(NULL);
ptstring=ctime(&t1);

while(count<=100)
{
srand( (unsigned)time( NULL ) );
x=rand()%50;
if(x<5)
continue;
else
{
count++;
cout<<"the numth is "<<<'/n';
}
}

查看ptstring的值会显示 "Tue Sep 13 16:31:06 2005"

3, 最后说说srand()函数
void srand(unsigned seed) 初始化随机数发生器

有讨论如下:
1.C的函数库之所以没有把使用系统时钟初始化随机种子这步重要的操作直接放进ran

d函数的实现中,我觉得至少有三个原因:
(1)可以高效产生连续的随机数,不用每次都初始化;
(2)给程序员以更高的灵活性,因为可能在要求较高的场合,应该使用更好的的数据

做种子,而不是系统时钟;
(3)对于只是想产生大量伪随机数来尽兴某种验证或者统计,未必需要初始化,大不

了程序每次运行都产生同样的一系列随机数而已——有些情况下,这是无所谓的。

事实上有一个更重要的原因:
作为伪随机序列产生器的rand()函数,必须具备的一个重要特性就是-》产生的序

列必须是可重现的。
这不仅仅是一个算法,相当大的程度上,它关系到代码测试的准确性。如果算法中

使用了和rand()的结果相关的数据,通过一个可控的可重现序列,我们就有机会再现每一

次测试的过程,从而更有效的找到问题的所在。
所以这里提出一个建议,代码中,如果rand()的函数结果关系到算法的结果,那么

,必须保证你的rand()调用是可重现的。

4,c语言里函数rand()和srand()的用法 - -

rand(void)用于产生一个伪随机unsigned int 整数。
srand(seed)用于给rand()函数设定种子。

srand 和 rand 应该组和使用。一般来说,srand 是对 rand 进行设置。
比如:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之间的随机数。

srand()是用来初始化随机种子数的,因为rand的内部实现是用线性同余法做的,他不是真

的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,式子如下


rand = rand*const_1 + c_var;
srand函数就是给它的第一个rand值。

用"int x = rand() % 100;"来生成 0 到 100 之间的随机数这种方法是不或取的,
比较好的做法是: j=(int)(n*rand()/(RAND_MAX+1.0))  产生一个0到n之间的随机

5.总结
1)srand()给rand()提供种子
2)srand()中的seed一般由时间函数得,eg srand((UINT)GetCurrentTime()) srand( (unsigned)time( NULL ) ) time()函数得到现在的系统时间...等等

http://blog.sina.com.cn/s/blog_4983d426010005wz.html?retcode=0

来源:(http://blog.sina.com.cn/s/blog_4983d426010005wz.html?retcode=0) - C语言(rand函数)_丁志中_新浪博客

C语言(rand函数)相关推荐

  1. C语言rand()函数产生随机数详解

    C语言rand函数产生随机数详解 1.rand函数的原型,功能和界限 2.用rand函数获取随机数 3.随机数生成原理 1.rand函数的原型,功能和界限 rand函数的原型: #include &l ...

  2. c语言rand函数_C语言随机函数学不明白?一知识一案例,全面解析C语言随机函数

    前言 本文主要讲解C语言的随机函数,学习随机函数将由此拉开序幕,亲爱的准备好了没? 随机数 随机数主要是通过rand()函数产生的,rand() 函数可以随机产生一个正整数,它会产生一个无符号整数,范 ...

  3. C语言 rand函数(随机)

    rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子.如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand().而使用同种子相 ...

  4. c语言rand函数的作用,详解C语言中rand函数的使用

    前言 我们在编程实现算法的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的ran ...

  5. C语言rand()函数解析

    C语言的rand()函数位于<stdlib.h>.该函数可以生成一个取值为0-32767的伪随机数.先看一下函数的实现. unsigned long int next = 1;int ra ...

  6. C语言 rand函数,srand函数 生成随机数用法详解

    与随机数有关的两个函数,srand() 和 rand(),这两个函数都包含"stdlib.h"头文件里 srand()函数是随机数发生器,使得每轮产生的随机数列都不相同.      ...

  7. C语言rand()函数使用

    rand函数的使用: 1.生成一个0~1之间的小数 方法一:利用两个数相除 #include <stdio.h> #include <stdlib.h> #include &l ...

  8. c语言rand函数的使用范围,C random C ++rand函数应用

    random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过.但在C语言中int random(num)能够这样使用,它返回的是0至num-1的一个随机数. 可改用C++下的rand函数 ...

  9. c语言rand再哪个头文件里,c语言rand函数头文件

    摘 要 本文针对高等数学中较难理解的函数的微分一节课进行了一堂课的教学设计.力求充分调动课题气氛,更好地完成教学任务. 关键词 函数的微分 概念 能力 中图分类号:O172 1 文献标识码:A 摘 要 ...

最新文章

  1. 报错You may use special comments to disable some warnings.vue-cli脚手架关闭eslint的步骤
  2. 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中
  3. 【算法知识】详解直接插入排序算法
  4. L2-002 链表去重 (25 分) 船新方法
  5. 使用MyEclipse修改web项目名称
  6. Springboot整合netty实战
  7. c语言 void fun(float *p1),C语言程序设计试题1
  8. tomcat 运行报错 JRE_HOME
  9. 牛逼神器第三弹--nth_element函数
  10. 华为堡垒机_案例:任正非曾为小灵通痛苦8到10年,促进了华为终端公司诞生
  11. C语言中strstr函数
  12. 私藏的18个黑科技网站,想找什么软件就找什么软件!
  13. ROI是什么?电商ROI计算公式及理论及详解
  14. 1005打印任务取消不了 hp_hp打印机无法取消打印的文档解决方法(最新整理)
  15. Microsoft Visio 专业版 2019,注意事项(bat文件乱码以及登不上Microsoft账号问题0x80190001)
  16. php eval 禁止,php5.x禁用eval的操作方法
  17. 耳机基本知识及评判指标
  18. 分析问题之三步走方法
  19. ROS运行调用摄像头无法显示的解决办法
  20. Python爬虫入门10:select方法快速定位HTML内容

热门文章

  1. Linux下的docker容器安装教程
  2. 深入理解JVM虚拟机(六):虚拟机类加载机制
  3. Linux段式管理与页式管理
  4. 新手看看如何发布一个网站
  5. echarts自定义提示框数据
  6. javaScript设计模式---(单例模式学习)
  7. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...
  8. (重点章节复习以及代码调整笔记)选择器:伪类和伪元素选择器(部分)
  9. vsftpd配置文件详解[转载]
  10. 使用beanUtils操纵javabean