今天看到一段小程序 ,里面用到随机数。才发现在C语言中产生随机数不像matlab中那么简单。

C中也有rand()函数,但是rand()函数产生的数不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们称它为种子,为基准以某个递推公式推算出来的一系列数。范围在0~RAND_MAX之间。RAND_MAX和rand()一样也定义在stdlib.h中,其值至少为32767。当计算机正常开机后,种子是固定了的。所以如果不结合其他函数,使用rand()产生随机数就会出现以下情况:

 #include<stdlib.h>
int main()
{
int i,j;
for(i=;i<;i++)
{
j=+(int)(rand()%);
printf("%d",j);
}
}

你会发现程序连续执行N次的结果是一样的,这是因为如果未设置随机数种子,rand()在调用时会默认随机数种子为1。为了解决这个问题C提供了srand()函数。所以在调用rand()产生随机数之前必须调用srand()设置种子。srand()的原形是void srand(int a)。下面结合srand()的使用我们编写一个产生随机数的程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((int)time());
int i;
for (i=;i<!;i++)
{
printf("%d ",(int)(rand()%));
} printf("\n");
}
root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# ./test

root@ubuntu:/home/qj/python_pro# 

其中time()用来获得机器时间,它定义在time.h中。

由于程序执行是随机的,系统时间也具有随机性。故可以得到具有随机性的种子,且每次使用rand()函数前都使用srand()设置一次种子,这样我们就能得到随机数了。

还可以参考:

http://wenku.baidu.com/link?url=UCsVYyZNNAoXlVUIqhGjppcbL6JlCpxMPxAhyzep_ePMDxb977NQqTk-DAed7k7-kjj9v90Bn6N0a-P1rfaGi9DvN0WsVY04kF8-L34dXn_

C语言中如何产生随机数的更多相关文章

  1. Java语言中自动生成随机数

    参考原文:http://zhidao.baidu.com/link?url=nB3BT69wmUAiSPfKGgK5Q7HOFFP9AIE04AthreRd9yYcwKhUQsQRWlMdMhW1Qm ...

  2. C语言/C++中怎样产生随机数

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib. ...

  3. c语言中实现从0-1的随机数输出

    原文:c语言中实现从0-1的随机数输出 今天晚上同学问了一个巨简单的问题,问我怎么用c语言输出0-1的随机数,可别说,一时之间还想不出来.在写的过程中发现,直接调用random函数还不能实现,用以下方 ...

  4. C语言中如何写一个简单可移植而又足够随机的随机数生成器

    在C语言中标准库中的随机数产生函数的返回可能不是最优的,因为有些随机数生成器的低位并不随机,而另一些返回随机数的函数实现上又太复杂鸟.所以rand()%N并不是一个好方法,牛人给出的建议是使用: ra ...

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

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

  6. [转]C语言/C++中如何产生随机数

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib. ...

  7. C语言/C++中如何产生随机数

    C语言/C++中如何产生随机数 作者: 字体:[增加 减小] 类型:转载 时间:2013-10-14我要评论 这里要用到的是rand()函数, srand()函数,和time()函数.需要说明的是,i ...

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

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

  9. 浅析c语言中的变量(局部变量,外部变量,静态变量,寄存器变量)[转]

    c语言中变量分为四类,分别是 1.auto   自动变量 2.static   静态存贮分配变量(又分为内部静态和外部静态) 3.extern  全程变量(用于外部变量说明) 4.register   ...

随机推荐

  1. SQLSERVER 删除用户15434错误

    sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息.这些进程可以是客户端进程或系统进程.sysprocesses 只存储在 master 数据库 ...

  2. SQL Server中的锁 详解 nolock,rowlock,tablock,xlock,paglock

    摘自: http://www.myexception.cn/sql-server/385562.html 高手进 锁 nolock,rowlock,tablock,xlock,paglock 锁 no ...

  3. JS 深度拷贝 Object Array

    JS 深度拷贝 Object Array function cloneObj(o) { var isArray = o instanceof Array; var isObject = o insta ...

  4. 好莱坞电影公司&系列电影

    - 好莱坞6大发行公司: - Warner Bros(WB): <哈利·波特>, 黑客帝国, 蝙蝠侠, - New Line cinema新线(2008): 魔戒, 霍比特人, 尖峰时刻, ...

  5. mysql replication

    change master to master_host='192.168.0.3',master_user='myrepl',master_password='5rNUnOHxut3lkP4wXds ...

  6. dedecms 模板静态化

    require_once (dirname(__FILE__) . "/../include/common.inc.php"); require_once DEDEINC.&quo ...

  7. SQL判断某列中是否包含中文字符、英文字符、纯数字 (转)

    一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' 二.包含英文字符 select * from 表名 where 列名 like '%[a-z]%' ...

  8. Python基础篇【第7篇】: 面向对象(1)

    面向对象技术简介 相近对象,归为类 在人类认知中,会根据属性相近把东西归类,并且给类别命名.比如说,鸟类的共同属性是有羽毛,通过产卵生育后代.任何一只特别的鸟都在鸟类的原型基础上的.面向对象就是模拟了 ...

  9. PHP开源论坛PunBB在IIS上部署和安装

    说明:对PHP的模式修饰符e来说:自 PHP 5.5.0 起废弃,而PunBB1.4.2还是有用到的(我曾用二者搭配,结果网站运行中会出现错误),所以我用了php-5.4.30. 一.运行环境 首先如 ...

  10. Java面向对象㈡ -- 继承与多态

    Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...