C语言如何生成随机数?

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的随机数也总是一样的。就好像是一个教室里的上课学生,只有教室不一样,里面上课的学生才会不一样。

什么东西是总在变化的呢?

时间。时间无时无刻都在变换永远不会重复。所以用当前时间毫秒值来设置为种子,生成的随机数永远跟上一次生成的随机数不一样(某种意义上的不一样),因为时间不一样,种子也就不一样。

相关推荐

  1. 生成随机数C++

    2023-12-15 12:48:02       48 阅读
  2. C++生成随机数游戏

    2023-12-15 12:48:02       40 阅读
  3. c语言-生成随机数、获取当前年月日时分秒

    2023-12-15 12:48:02       44 阅读
  4. 明明的随机数C语言

    2023-12-15 12:48:02       56 阅读
  5. 【华为OD机试C++】生成随机数

    2023-12-15 12:48:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-15 12:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-15 12:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-15 12:48:02       82 阅读
  4. Python语言-面向对象

    2023-12-15 12:48:02       91 阅读

热门阅读

  1. IPv6网络协议有什么用

    2023-12-15 12:48:02       62 阅读
  2. ES客户端RestHighLevelClient的使用

    2023-12-15 12:48:02       66 阅读
  3. Elasticsearch 查询语法

    2023-12-15 12:48:02       61 阅读
  4. float32、int8、uint8、int32、uint32之间的区别

    2023-12-15 12:48:02       56 阅读
  5. 热红外图像增强算法

    2023-12-15 12:48:02       51 阅读
  6. MySQL 8 中 utf8mb4 的强大:释放多语言数据的潜力

    2023-12-15 12:48:02       47 阅读