C语言生成随机数的基本方法是使用 rand() 和 srand() 等函数。通过设置不同的种子和计算范围,可以生成各种各样的随机数。在实际应用中,可以根据具体需求选择合适的随机数生成方式。

1、使用 rand() 生成随机整数

rand() 函数是 C 语言中生成伪随机整数的标准方法。然而,单独使用 rand() 不能生成完全随机的数字,它使用的是基于种子值的伪随机数生成算法。

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

int main() {
    // 使用当前时间作为种子来初始化随机数生成器
    srand(time(NULL));

    // 生成一个随机整数
    int randomValue = rand();
    printf("随机整数: %d\n", randomValue);

    return 0;
}

为了在每次运行程序时得到不同的随机值,你需要为随机数生成器设置种子。通常的做法是使用 srand() 函数,并传递一个变化的值,比如当前时间,这样可以确保每次执行程序时随机数序列不同。time(NULL) 返回自 Unix 纪元以来的秒数,每次程序执行时都会变化,从而确保每次执行时使用不同的种子。

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

int main() {
    // 初始化随机数生成器,使用当前时间作为种子
    srand(time(NULL));

    // 生成并打印 0 到 99 之间的随机数
    int random_number = rand() % 100;
    printf("随机数: %d\n", random_number);

    return 0;
}

2、在指定范围内生成随机整数

如需要生成一个在指定范围内的随机数,在 minmax 之间,可以使用取模操作符(%)来限制范围。

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

int main() {
    srand(time(NULL));

    int min = 10, max = 50;
    // 生成一个在 [min, max] 范围内的随机数
    int randomValue = rand() % (max - min + 1) + min;

    printf("在 %d 和 %d 之间的随机整数: %d\n", min, max, randomValue);

    return 0;
}

3、使用当前时间的微秒数

可以利用系统的微秒级时间戳生成随机数。这种方法生成的随机数可能不如 rand() 等方法均匀分布,但在一些简单的场景下可以使用。

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

int main() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    
    // 使用微秒数作为种子
    unsigned int seed = tv.tv_usec;
    
    srand(seed);
    
    // 生成 0 到 99 之间的随机数
    int random_num = rand() % 100;
    
    printf("随机数:%d\n", random_num);
    
    return 0;
}

4、使用 rand() 和时间戳结合的 XOR 方式

可以通过与系统时间戳结合,使用异或(XOR)运算来生成随机数。

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

int main() {
    unsigned int seed = (unsigned int)time(NULL) ^ 0xabcdef; // 异或当前时间
    srand(seed);
    
    // 生成 0 到 99 之间的随机数
    int random_num = rand() % 100;
    
    printf("随机数:%d\n", random_num);
    
    return 0;
}