c语言中什么情况下会出现随机数,C语言中如何产生随机数

C语言中的rand()函数产生的是伪随机数,依赖于种子值。若未设置种子,连续执行rand()会得到相同结果。解决办法是使用srand()函数设置种子,通常结合time()获取当前时间作为种子,以确保每次运行产生不同的随机数。通过srand((int)time())初始化种子,然后用rand()可生成0到RAND_MAX间的随机数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

#include

int main()

{

int i,j;

for(i=;i

{

j=+(int)(rand()%);

printf("%d",j);

}

}

8be85b6628e3d73bce696ae9bd0e4d23.png

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

#include

#include

#include

int main()

{

srand((int)time());

int i;

for (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_

Java语言中自动生成随机数

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

【中文分词】最大熵马尔可夫模型MEMM

Xue & Shen '2003 [2]用两种序列标注模型--MEMM (Maximum Entropy Markov Model)与CRF (Conditional Random Field ...

ZeroMQ接口函数之 :zmq_term - 终结ZMQ环境上下文(context)

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_term zmq_term(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_term - 终 ...

H:Highways

总时间限制: 1000ms 内存限制: 65536kB描述The island nation of Flatopia is perfectly flat. Unfortunately, Flatopi ...

(翻译)什么是Java的永久代(PermGen)内存泄漏

http://www.codelast.com/?p=7248 转载请注明出处:http://www.codelast.com/ 本文是我对这篇文章的翻译:What is a PermGen leak ...

JSP_include指令和<jsp:include>

包括三个文件:jsp_include.jsp, static.html, two.jsp 周边环境:tomcat7.0. myeclipse10 1.jsp_include.jsp

【django之权限组件】

一.需求分析 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,一个角色拥有若干权限.这样,就构造成& ...

IT技术团队管理之成长

------------------------------------------------------------------ 今天先到这儿,希望对您技术领导力, 企业管理,系统架构设计与评估, ...

hnctf安恒--蜘蛛侠呀

这题不会做,赛场被吊打,事后才明白 首先解压看到是流量包,放在wireshark,过滤http很明显看到no_flag.zip,当时想这是个关键点,然后把时间都浪费在这上了,赛后发现并没有传输数据的包 ...

js中this的总结

http://www.blogjava.net/baoyaer/articles/105864.html 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了 ...

剥开比原看代码12:比原是如何通过/create-account-receiver创建地址的?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchai ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值