keil中如何产生随机数?

看了很多帖子,说用srand产生种子,然后rand()产生随机数但是种子必须每次不一样的C语言中time.h可以产生种子:srand((unsignedint)time(... 看了很多帖子,说用srand产生种子,然后rand()产生随机数
但是种子必须每次不一样的
C语言中time.h可以产生种子:srand((unsigned int)time(NULL))

可是keil中没有time.h 即使我把C库函数中的time.h复制到keil相应文件夹下也不管用

请教高手如何产生随机数呢?
谢谢你,我好像是做出来了

用定时计数器0产生中断,记录中断次数作为种子,i=rand();delay(i);

每次延时都是不一样的,你看这样对吗?
展开
 我来答
Michael1517
2010-04-16 · TA获得超过358个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:99.6万
展开全部
这个函数在我一个项目里用过,测试通过,就直接传授给你吧:
首先头文件写上:#include "stdlib.h"
然后在后边就可调用rand()这个函数了.

给你再具体说下吧,这里边还有些细节问题.
实际上,随机函数有两个,srand和rand.要实现你说的功能得配合使用.
函数一:纳首裂int rand(void);
从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。

函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。

rand()在每次被调用的时候,它会查看:
1)如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用
srand(seed)一次来初始化它的起洞闭始值。
2)如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。

总结一下,也就是说:
1)如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。
2)否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得

所以,对于你来说,要想让每次的随机值不同,必需先调用srand函数,即:srand(i),而且要保证每次的i不同,这样才能使得种子不同,每次调用rand后才后有不同的返回值.
一般来说,要使这个i不同,如果你的系统带时钟功能的话,可以把当前时间赋给i,这样每次的i就不同,如果单片机带AD的话也可以把AD引脚悬浮,读取一下AD转换值,因为最末位的数据很不稳定,也可以作为随机数的种子

另外你所说的time.h是不芹悔行的,因为这个头文件是针对PC来说,可以读取系统时间,对于单片机一般没有时钟芯片,也无法读取时间.
百度网友1fdb2679
2012-06-30
知道答主
回答量:47
采纳率:0%
帮助的人:17.7万
展开全部
我是大一新生,我现在在做项目,遇到同样的问题,仿启梁但是还是不太明白楼上说的解答,旁运能备运不能吧代码拿来看看呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f370332
2012-05-14
知道答主
回答量:14
采纳率:0%
帮助的人:4.4万
展开全部
能不能把你产生随机数的那部分程序给我看看啊,万分感谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式