在实际编程中,需要生成随机数。 例如,在吃蛇游戏中,食物出现在随机位置,扑克牌游戏中随机出牌。
在c语言中,通常使用stdlib.h头文件中的rand ) )函数生成随机数,其用法如下:
输入(void );
void表示不需要传递参数。
c语言也有可获取随机数的random (函数,但random )不是标准函数,VC/VS等编译器无法通过,所以很少使用。
rand ) )随机生成0到rand _ max之间的整数。
RAND_MAX是stdlib.h头文件中的宏,表示rand () )可以返回的最大随机数。 C语言标准没有规定RAND_MAX的具体数值,但至少规定了32767的值。 在实际编程中,不需要知道RAND_MAX的具体值,可以当作大的数来处理。
随机数生成的例子如下所示。
#include stdio.h
#include stdlib.h
int main ()。
int a=rand (;
printf(%d(n ),a );
返回0;
}
执行结果:
193
随机数的本质
如果多次运行上面的代码,您会发现每次出现的随机数都是相同的。 这是怎么回事呢? 为什么随机数不是随机的呢?
实际上,rand ()函数中出现的随机数是伪随机数,是根据某个数值或某个公式估计的。 这个数值称为“种子”。 种子和随机数的关系是正态分布。
每次启动计算机时种子都是随机的,但计算机启动后种子不再变化,这意味着每次启动计算机时种子都是固定值。 因此,根据表达式估计的结果(即生成的随机数)是固定的。
重新播种
我们可以用srand ()函数重新“播种”。 那样的话,物种就会改变。 srand ) )的使用方法如下。
voidsrand(unsignedintseed );
需要unsigned int型的参数。 在实际开发中,时间可以作为参数。 如果每次播种的时间不同,生成的物种不同,最终的随机数也不同。
time.h头文件中的time ) )函数可以获取当前时间(以秒为单位),如下所示:
srand () unsigned (time ) ) null );
修改以上代码,在生成随机数之前进行种子。
#include stdio.h
#include stdlib.h
#include time.h
int main ()。
int a;
srand () unsigned (time ) ) null );
a=rand (;
printf(%d(n ),a );
返回0;
}
如果多次运行程序,您会发现每次生成的随机数都不一样。 但是,这些随机数有逐渐增大或减少的趋势。 这是因为我们以时间为种子,时间会逐渐增大,结合上面的正态分布图,很容易推测随机数也会逐渐增大或减少。
如果你在学习C/C时遇到问题,可以加入编辑的企鹅圈去问编辑哦。 编辑很亲切。 ’’)
生成一定范围内的随机数
在实际开发中,往往需要一定范围的随机数,过大或过小都不符合要求。 那么,如何生成一定范围的随机数呢? 我们可以利用取模的方法:
inta=rand( (; 产生//0~9的随机数,注意10能被整除
规定上下限时:
inta=rand(Q13; 产生13~63的随机数
分析:取模就取余。 rand(q13可以认为是两个部分。 rand ) q产生0到50之间的随机数。 后13保证a最小只有13,最大50 ) 13=63。
最后给出产生13~63范围内随机数的完整代码:
#include stdio.h
#include stdlib.h
#include time.h
int main ()。
int a;
srand () unsigned (time ) ) null );
a=rand(Q13;
printf(%d(n ),a );
返回0;
}