C语言-如何生成随机数?

rand函数 

 在C语言中,rand函数用于生成伪随机数。它的原型如下:int rand(void);                             

rand函数会返回一个范围在0到RAND_MAX之间的整数,其中RAND_MAX是一个常量,表示随机数的最大取值。RAND_MAX的值是32767。因为它的值有最大范围限制,所以称rand函数生成伪随机数不过,我们可以通过srand函数优化rand函数生成随机数的范围。

如果你想生成一个指定范围内的随机数,可以使用取余运算符来实现。例如,如果想生成一个范围在0到9之间的随机数,可以使用rand() % 10。这将返回一个0到9之间的整数。

srand函数

在C语言中,srand函数用于设置随机数生成器的种子。

它的原型如下:void srand(unsigned int seed);

其中,seed是一个无符号整数,用于初始化随机数生成器的种子。通常情况下,我们会使用time函数来获取当前时间作为种子,以确保每次程序运行时生成的随机数序列都是不同的。

示例如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int i;
    
    // 使用时间作为种子
    srand((unsigned int)time(NULL));
    
    // 生成并打印10个随机数
    for (i = 0; i < 10; i++) {
        printf("%d\n", rand());
    }

    return 0;
}

在上面的示例中,srand((unsigned int)time(NULL))将时间作为种子传递给srand函数,然后通过rand函数生成10个随机数并打印出来。由于种子是随时间变化的,每次运行程序时都会得到不同的随机数序列。

为什么强制类型转换(unsigned int)呢?

在一些编译器和编译环境中,time(NULL) 的返回值可能是 time_t 类型,而 srand 函数的参数是 unsigned int 类型。将 time(NULL) 强制转换为 unsigned int 类型是为了确保类型匹配,避免编译器警告。

所以,将 time(NULL) 前面加上 (unsigned int) 是一个良好的实践,确保在不同编译环境下程序能够正常运行,避免类型不匹配的问题。这样做可以提高代码的可移植性。

猜你喜欢

转载自blog.csdn.net/m0_73800602/article/details/131950580