813 字
4 分钟
C语言中的随机数生成
// 随机数
/*
C语言中的随机数其实是伪随机数,它是通过数学里面的线性同余公式( xn+1 = axn + bmodm ),其中a b m 是自己设置的参数,
不同的参数可以决定随机数的范围以及随机数的均匀度。前面的xn+1就是我当前要计算的那个随机数,后面的xn是表示的前一个数,mod表示获取余数。
整体就表示,咱们当前获取的随机数是拿着a乘以前一个数再加b,然后跟m相除获得余数,这个余数就是现在要计算的随机数。所以,我们知道,我们获得的随机数实际是通过前一个数字在经过一系列的复杂计算得到的。
所以,我们在生成随机数的时候要设定一个最初的数字,这个最初的数字就叫种子。
在C语言中,我们可以使用rand()函数(来自stdlib.h)来计算随机数,可以用srand()来设置种子,
*/
// 设置种子
// 如果忘了设置种子直接用随机数函数,也不会报错,它会有默认的种子1
srand(1);
// 获取随机数
int Ran;
Ran = rand();
printf("%d\n", Ran);
int i;
for (i = 0; i < 10; i++)
{
Ran = rand();
printf("%d\n", Ran);
}
/*
随机数的两个弊端:
1. 如果种子不变,随机数的结果是固定的,
2. 随机数的范围无法指定
*/
// 第一个问题的解决方案:既然种子不变,随机数的结果固定,那我们就让种子变化;方案就是使用此刻的时间充当种子:
int Ran1;
srand(time(NULL));
for (i = 0; i < 10; i++)
{
Ran1 = rand();
printf("%d\n", Ran1);
}
// 第二个问题:如果不指定范围,随机数默认的范围是0-32767;
/*
要生成任意范围的随机数,第一步:我们就要把这个范围变成包头不包尾,包左不包右的,比如我要定义1-100的随机数,那我就要找的范围是1-101,
第二步:拿着尾巴减开头:这里就是101 - 1 = 100
第三步:修改代码:用随机数对上面获得的结果取余,然后再加上这个范围的开始,Ran = rand() % 100 + 1;(这个地方很简单,rand%100后的范围是1-99加1之后的范围就变成了1-100)
*/
// 生成100-200之间的随机数
for (i = 0; i < 10; i++)
{
Ran1 = rand() % 101 + 100;
/*思路:就是我甭管你这个数是多少,;我直接让你对101取余,
那么得到的数字一定是在1-101(不包括101)之间的,
我再加100就是我需要的范围了*/
printf("%d\n", Ran1);
}部分信息可能已经过时