C语言如何生成随机数?

简介: C语言如何生成随机数?

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

rand() 函数:

  1. rand() 函数用于生成一个0到RAND_MAX(通常是32767)之间的整数伪随机数。
  2. 每次调用 rand() 函数都会生成下一个伪随机数。
  3. 请注意,生成的伪随机数序列是可重复的,因为它是根据特定的算法生成的。如果你希望每次运行程序时获得不同的随机数序列,可以在使用 rand() 函数之前使用 srand() 函数设置不同的种子。

srand() 函数:

  1. srand() 函数用于设置 rand() 函数生成随机数所使用的种子。
  2. srand() 函数需要传递一个整数值作为参数,这个参数被用作生成随机数的种子。
  3. 通过设置不同的种子,可以使得每次运行程序时生成不同的随机数序列。
  4. 通常,可以使用当前系统时间作为种子值,以确保每次运行程序时都有不同的种子值。例如: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的随机数也总是一样的。就好像是一个教室里的上课学生,只有教室不一样,里面上课的学生才会不一样。

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

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

相关文章
|
6月前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
266 0
|
算法 编译器 C语言
C语言学习系列-->【关于随机数的实现】
C语言学习系列-->【关于随机数的实现】
78 0
|
6月前
|
算法 编译器 C语言
你知道C语言中随机数是如何生成的吗~?
你知道C语言中随机数是如何生成的吗~?
|
5月前
|
算法 Unix Linux
C语言随机数的产生(rand、srand、time函数细节讲解)
C语言随机数的产生(rand、srand、time函数细节讲解)
|
5月前
|
算法 编译器 C语言
【C语言】:详解随机数的生成和猜数字游戏的实现
【C语言】:详解随机数的生成和猜数字游戏的实现
108 0
|
6月前
|
C语言
史上最简单的C语言猜数字小游戏(1—100随机数)
史上最简单的C语言猜数字小游戏(1—100随机数)
|
6月前
|
存储 编译器 C语言
c语言随机数生成(rand,srand,time)
c语言随机数生成(rand,srand,time)
127 1
|
C语言
C语言生成随机数
C语言生成随机数
|
6月前
|
C语言
用C语言写一个猜随机数的小游戏
用C语言写一个猜随机数的小游戏
48 0
|
12月前
|
算法 C语言
【C语言】猜数字小游戏——深度刨析rand函数生成随机数
【C语言】猜数字小游戏——深度刨析rand函数生成随机数
76 0