rand函数用于在C语言中生成0到1之间的随机小数,其内部实现采用了线性同余法。线性同余法是一种常用的随机数生成算法,它不是真正的随机数,但在一定范围内可以看作是随机的。
线性同余法的算法流程如下:
1. 选取一个初始种子(通常是一个较小的整数),作为线性同余法的初始值。
2. 定义一个线性同余生成器函数,该函数接受一个种子作为输入,并输出一个新的种子。
3. 将输出的新种子作为输入再次传入生成器函数,得到下一个种子。
4. 重复执行步骤3,直到得到足够多的随机数。
线性同余法生成的随机数具有一定的周期性,即当生成一定数量的随机数后,它们会重复出现。因此,虽然不是真正的随机数,但在一定范围内可以看作是随机的。
除了rand函数外,C语言中还提供了一个srand函数,用于初始化随机数生成器的种子。通常,srand函数会在程序开始运行时被调用一次,以确定随机数生成器的初始状态。
rand()函数的返回值就是求取随机的值,所以如果没有对数据有要求,直接这样写: printf("%d", rand());//输出一个随机数. 但如果对数有要求,如小数或在一定值以内: 小数:rand()/100.0 //100.0后面的.0必须写,得到一个小数点后有两位小数的小数。 一定范围内的数:rand()%m+n //m是数据区间差,n是最小值 如:求[ 100,120)之间的数就是:rand()%20+100 rand()函数得到的是一伪随机序列,即,每次运行时,得到的随机序列是相同的(这是为了保证调试程序时,每次保持相对稳定的数据,便于查找程序问题)。为了得到不同的随机序列,系统提供了srand(int n)函数设置随机种子,n值不同时,就会得到不同的随机序列,常用方法为: srand(time(NULL)); //time的返回值是当前系统时间(秒数),因为每次运行时的时间不同,time的结果就会是不同的值,这样,srand()设置的种子就会不同,得到的随机序列也就会不同。 time在中声明 rand,srand在中声明.