当前位置:  编程技术>c/c++/嵌入式

c语言中 基于随机函数的使用详解

    来源: 互联网  发布时间:2014-10-13

    本文导语:  在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而...

在C语言中,rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int a)。
可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。

rand()会返回一随机数值,范围在0至RAND_MAX 间。返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,(其值至少为32767)我运算的结果是一个不定的数,要看你定义的变量类型,int整形的话就是32767。 在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。一般用for语句来设置种子的个数。具体见下面的例子。

一 如何产生不可预见的随机序列呢
利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。
下面是0~32767之间的随机数程序:

代码如下:

#include
#include
#include            //使用当前时钟做种子

void main( void )
{
  int i;
  srand( (unsigned)time( NULL ) );          //初始化随机数
     for( i = 0; i < 10;i++ )                          //打印出10个随机数
          printf( " %dn", rand() );
}

根据上面的程序可以很容易得到0~1之间的随机数:
代码如下:

#include
#include
#include
main( )
{
   int i;
   srand( (unsigned)time( NULL ) ); 
       for( i = 0; i < 10;i++ )
            printf( "%5.2fn", rand()/32767.0);
}

而产生1~100之间的随机数可以这样写:
代码如下:

#include
#include
#include
main( )
{
   int i;
   srand( (unsigned)time( NULL ) ); 
       for( i = 0; i < 10;i++ )
            printf( "%dn", rand()%100+1);
}

二,三个通用的随机数发生器,推荐用第三个
函数名: rand
功 能: 随机数发生器
用 法: void rand(void);
程序例:
代码如下:

#include
#include

int main(void)
{
   int i;

   printf("Ten random numbers from 0 to 99nn");
   for(i=0; i

    
 
 

您可能感兴趣的文章:

  • sql语言中delete删除命令语句详解
  • 汇编语言rep movsd 的使用详解
  • 基于C语言fflush()函数的使用详解
  • c语言中位字段与结构联合的组合使用详解
  • C语言中堆空间的生成与释放详解
  • 深入c语言continue和break的区别详解
  • C语言中#define与typedef的互换细节详解
  • 基于C语言中段错误的问题详解
  • C语言循环队列的表示与实现实例详解
  • 关于c语言的一个小bug详解
  • C语言单链队列的表示与实现实例详解
  • Android笔记之:深入为从右向左语言定义复杂字串的详解
  • C语言中判断int,long型等变量是否赋值的方法详解
  • 关于C语言指针赋值的问题详解
  • C语言高斯消元法的使用详解
  • C语言栈的表示与实现实例详解
  • 深入C语言内存区域分配(进程的各个段)详解
  • 深入分析C语言中结构体指针的定义与引用详解
  • C语言位图算法详解
  • c语言stack(栈)和heap(堆)的使用详解
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • java 的条件判断函数(类似于别的语言iif函数)
  • Unix系统函数和C语言标准函数库有重叠的部分吗?
  • c语言也能重载函数? 怎么解释。unix编程的open函数。
  • SAC函数式编程语言
  • 我在c语言下建立一个函数,难道不能在函数名称前加 void 么?
  • 在Unix下C语言中的SignalInit函数怎么用
  • Linux添加系统调用时如何调用C语言库函数
  • C语言中函数声明与调用问题
  • c语言 字符串函数 子串
  • C语言哈希函数库 murmur3
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 以NetBeans IDE为例介绍如何使用XML中Schema语言
  • kliyx是使用C++语言编程的,还是用C语言编程的?
  • 使用c语言判断100以内素数的示例(c语言求素数)
  • 在linux下使用C语言一般是使用什么编程工具呢???
  • 在AIX和UNIX上可以使用什么编程语言?
  • 如何获取客户端浏览器所使用的语言,特别是要区分简繁体!
  • 我想在linux下开发软件,但不知道使用什么语言好,和使用什么开发工具
  • 如何使用汇编语言
  • linux下用c语言写的程序,其中可以使用STL模板吗?先谢谢各位
  • c语言在unix系统下,如何获取cpu使用率
  • 如何在C语言的宏中使用类型关键字
  • 各位大侠,请推荐几本在UNIX环境下使用标准C语言编程的好书.谢谢啊!!!
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • 如何使用yacc分析c语言程序?
  • 菜鸟问题——其他语言怎样使用Java编写的程序(明确地说,使Class)
  • 在语言中,什么是共享内存,怎样使用,举例?
  • 如何使用c语言获取当前系统的时间,就是那个秒数?
  • ****请问谁有linux下c 语言函数的使用说明呀??要中文的!!!****
  • 在linux下,C语言编程,使用tell函数的问题
  • C语言中宏定义使用的小细节
  • linux使用c语言怎样实现程序唯一性
  • 2013年7月和2013年8月编程语言排行榜
  • 如何在GTK2.0下实现国际化(语言选择根据自己设置的语言,不用系统的语言)
  • 2017 年热门编程语言排行榜出炉,你的语言上榜没?
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • 苹果OS X和IOS下最新编程语言swift介绍
  • 求助,在linux下,c语言和汇编语言的接口是什么?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • C语言中间语言 CIL
  • PHP编程语言介绍及安装测试方法
  • 最近学JSP,苦于HTML语言和JAVA语言太差,请教推荐几本书,thanks.




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3