1.初识随机函数
在实践中,找到真正的随机数字是困难的。数字计算机只能在一个限定的范围内和有限的精度下去处理数字。在大多数情况下,最好的方法是产生伪随机数,这不是真正意义的随机数,它的意义是:单次产生的数列是无法预测的,但是每次都会生成同样的一组随机数列。
C语言的标准函数库提供有一个随机数函数,即 rando()函数,它返回[0,MAX均匀分布的伪随机整数。rand()函数不接受参数,默认以1为种子(即起始值),它总是以相同的种子开始,所以形成的伪随机数列也相同,不是真正的随机。这是有意设计的,目的是为了便于程序的调试。
另一个函数是 srand(),可以使用该函数指定不同的数(无符号整数)为种子。但是如果种子相同,么伪随机数列也相同。有两种方法可以采用:一种是让用户输入种子,但效果不是很理想;另一种比较想的是采用变化的数,常用时间来作为随机数生成器的种子。这样,种子不同,产生的随机数也就不同。
使用随机函数
rand()函数没有参数,它返回一个从0到最大数之间的随机数。
要生成一个[a,b]范围内的随机数,可以表示为:
int n=a+srand()%(b-a+1);
下面我就写个代码
#include <stdio.h>
#include <stdlib.h>//包含转换和存储头文件
#include <time.h>//包含日期和时间处理头文件
#define max 100
int main() {
srand((unsigned)time(NULL));//随机数播种函数
for (int i = 0; i < 20; i++)//产生20个随机数
printf("%d\n", rand() % max);//设定随机数范围并输出
}
srand()函数的参数是一个带NUL参数的tmeO函数。NULL参数使tme0函数以秒为单位读取计算机内部时钟的时间,然后 srand()函数使这个时间初始化,rand()函数设定随机函数范围,也就是常说的产生一个以当前时间开始的随机种子。
MAX为生成随机数范围的上限值,rand%MAX产生的随机数范围是[0,max-1]。