C语言如何生成随机数?
2023-12-15 12:32:20
rand()
?函数和?srand()
?函数是C语言中用于生成伪随机数的两个标准库函数。
-
rand()
?函数:rand()
?函数用于生成一个0到RAND_MAX(通常是32767)之间的整数伪随机数。- 每次调用?
rand()
?函数都会生成下一个伪随机数。 - 请注意,生成的伪随机数序列是可重复的,因为它是根据特定的算法生成的。如果你希望每次运行程序时获得不同的随机数序列,可以在使用?
rand()
?函数之前使用?srand()
?函数设置不同的种子。
-
srand()
?函数:srand()
?函数用于设置?rand()
?函数生成随机数所使用的种子。srand()
?函数需要传递一个整数值作为参数,这个参数被用作生成随机数的种子。- 通过设置不同的种子,可以使得每次运行程序时生成不同的随机数序列。
- 通常,可以使用当前系统时间作为种子值,以确保每次运行程序时都有不同的种子值。例如:
srand((unsigned int)time(NULL))(time函数需要头文件time.h);
注意:
? ? ? C语言的随机数是伪随机数,是根据特定算法生成的,因此它们在某种程度上是可预测和重复的。如果需要更高质量的随机数或加密级别的随机数,请使用适用于该目的的专用库和函数。
用法:(假设需要生成一个1-100的随机数)
#include<stdio.h>
int main() {
//随机生成5个1-100的数
srand((unsigned int)time(NULL));//用当前毫秒值来当种子
int num = 0;
while (num <= 5) {
int x = rand() % 100 + 1;
printf("%d\n", x);
num++;
}
return 0;
}
为什么要用时间来当种子呢?
我们可以注释掉这一行代码观察:
第一次运行:
再运行一次:
不信邪?再来一次?我们发现如果不设置一个总是变化的种子,无论我们运行多少次,生成的随机数都是一样的。
当然你也可以把种子设置为1,你会发现,种子是1时的随机数顺序总是一样的,种子是2的随机数也总是一样的。就好像是一个教室里的上课学生,只有教室不一样,里面上课的学生才会不一样。
什么东西是总在变化的呢?
时间。时间无时无刻都在变换永远不会重复。所以用当前时间毫秒值来设置为种子,生成的随机数永远跟上一次生成的随机数不一样(某种意义上的不一样),因为时间不一样,种子也就不一样。
文章来源:https://blog.csdn.net/qq_62987647/article/details/132746549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!