库函数中系统提供了两个函数用于产生随机数:srand()和rand();
rand函数:
头文件<stdlib.h>
定义函数:int rand(void),
函数功能:产生随机数,
函数说明:因为rand的内部是用线性同余法做的,不是真的随机数,只不过因为其周期特别长,所以在一定范围内可以看成是随机的,rand()会返回一随机值,范围在0到RAND_MAX间,在调用此函数产生随机数前,必须利用srand()设好随机数种子,若没有设随机数种子,rand()在调用时会自动设随机数种子为1。
返回值:返回0到RAND_MAX之间的整数值,RAND_MAX的范围最少在32767之间(int),即双字节(16位)。若unsigned int双字节是65535,且0-RAND_MAX每个数字被选中的随机率是相同的。 rand()产生的是假随机数,每次执行时是相同的,若要不同以不同的值来初始化,初始化的函数就是srand()。
srand函数:
头文件 <stdlib.h> ,
定义函数:void srand(unsigned int seed);
函数声明:srand()用来设置rand()产生随机数时的随机数种子,参数seed必须是整数,通常可以用time(0)的返回值作为seed.如果每次seed都设置相同的值,rand()产生的随机数值每次都一样。
srand(unsigned)time(NULL))使用系统定时/计数器的值作为随机种子每个种子对应一组根据算法预先生成的随机数,所以在相同平台的环境下,不同时间产生的随机数是不同的,相应的若将srand(unsigned)tima(NULL)改为任一常量,则无论何时运行,运行多少次得到的随机数都是一组特定的序列,所以srand生成的随机数是伪随机数。但是,所谓的“伪随机数”指的并不是假的随机数,其实绝对的对技术只是一种假想状态的随机数,计算机只能生成相对的随机数,而这些随机数既是随机的又是有规律的,一部分遵守一定规律,一部分则不遵守任何规律,总结来说就是:计算机产生伪随机数而不是绝对的随机数 (注:该内容来自:百度百科-rand函数)
在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不完全相同了,而使用同种子相同的数调用rand()会导致相同的随机数序列被生成。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
main()
{
int i,k;
srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
{
k=rand()%100+1; //rand()%100表示取100以内的随机数,即取了随机数后再对100取余 x=rand()%(Y-X+1)+X
printf( " k=%d\n", k );
}
}
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10*rand()/(RAND_MAX+1));
printf("%d ",j);
}
printf("\n");
return 0;
}