keil中如何产生一个随机数,要完整的函数,请哪位大侠指点

如题所述

这个函数在我一个项目里用过,测试通过,就直接传授给你吧:
首先头文件写上:#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来说,可以读取系统时间,对于单片机一般没有时钟芯片,也无法读取时间
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜