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、在指定范围内生成随机整数
如需要生成一个在指定范围内的随机数,在 min
和 max
之间,可以使用取模操作符(%
)来限制范围。
#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;
}