在C语言函数库中包含了一个产生随机数的函数: int rand( void );
函数返回的是一个界于0~32767之间的伪随机数,包括0和32767。注意,这里产生的是伪随机数,不是真正意义上的随机数,看下面的程序:
#include "stdlib.h"
#include "stdio.h"
void main( )
{
/* 输出一个伪随机数 */
printf( " %d\n", rand() ); }
运行结果: 346
多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生的结果不一样),这就是所谓的伪随机数。那么,如何才能产生真正意义上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这么一个函数:多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生的结果不一样),这就是所谓的伪随机数。那么,如何才能产生真正意义上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这么一个函数:多次运行这个程序,发现每次产生的结果都是346(不同的机器可能产生的结果不一样),这就是所谓的伪随机数。那么,如何才能产生真正意义上的随机数呢?这就有一个随机种子的问题。在C语言标准函数库中,有这么一个函数:
void srand( unsigned int seed );
参数中的seed就是用来产生一个随机数系列的种子,缺省值是1。所以,要产生真正意义上的随机数,就要求每次提供的种子不一样,一般情况下,都设置时间为随机函数的种子。看下面的一段程序:
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
void main( )
{
int i;
/*将当前时间设置成随机函数的种子,所以每次产生的数都不一样*/
srand( (unsigned)time( NULL ) ); //注: 单片机系统中,可用系统时钟滴答或者定时器产生一个不断累加的数来代替time
/ * 输出10个随机数*/
for( i = 0; i < 10;i++ )
printf( “ %d\n”, rand() );
}
运行结果: 6929 8026 21987 30734 20587 6699 22034
25051 7988 10104 每次运行这个程序,产生的随机数都不一样,这样就达到要求了。若要输出1~10之间的随机数,可将最后一个printf中的rand()改为rand()%10+1
25051 7988 10104
每次运行这个程序,产生的随机数都不一样,这样就达到要求了。若要输出1~10之间的随机数,可将最后一个printf中的rand()改为rand()%10+1