C语言如何生成随机数?

2023-12-15 12:32:20

rand()?函数和?srand()?函数是C语言中用于生成伪随机数的两个标准库函数。

  1. rand()?函数:

    • rand()?函数用于生成一个0到RAND_MAX(通常是32767)之间的整数伪随机数。
    • 每次调用?rand()?函数都会生成下一个伪随机数。
    • 请注意,生成的伪随机数序列是可重复的,因为它是根据特定的算法生成的。如果你希望每次运行程序时获得不同的随机数序列,可以在使用?rand()?函数之前使用?srand()?函数设置不同的种子。
  2. 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。