随机数rand、srand、time
rand函数的使用
rand() 生成伪随机数,头文件是<stdlib.h>
它返回一个范围在 0 到 RAND_MAX(通常为 32767)之间的整数
直接调用 rand() 会生成相同的随机数序列,因为没有设置随机种子。
不适合用于加密等安全场景
c
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int i = 0; i < 5; i++) {
printf("%d\n", rand());
}
return 0;
}
srand函数的使用
srand() 用于设置 rand() 的随机种子,确保每次程序运行时生成不同的随机数序列
通常用 time(NULL) 作为种子,因为时间戳是动态变化的。
多次调用 srand() 可能导致随机性降低。通常只需在程序启动时调用一次。
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL)); // 设置随机种子
for (int i = 0; i < 5; i++) {
printf("%d\n", rand());
}
return 0;
}
time函数的使用
time() 是时间戳函数,位于 <time.h> 头文件中。传入 NULL 会返回当前系统时间的秒数(从1970年1月1日算起),常用于配合 srand() 生成随机种子。
c
#include <stdio.h>
#include <time.h>
int main() {
time_t current_time = time(NULL);
printf("Current timestamp: %ld\n", current_time);
return 0;
}
生成指定范围的随机数
通过取模和加法运算,可以将 rand() 的结果限制在特定范围内
生成 [a, b] 范围内的随机数:
c
int random_num = a + rand() % (b - a + 1);
生成0~99之间的随机数:
cpp
rand() % 100;
生成1~100之间的随机数
cpp
rand() % 100+1;
生成100~200之间的随机数
cpp
rand() % 200-100+1;
示例:生成 1 到 100 的随机数:
c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
for (int i = 0; i < 5; i++) {
int num = 1 + rand() % 100;
printf("%d\n", num);
}
return 0;
}
猜数字游戏
cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu() {
printf("1.猜数字\n");
printf("2.退出\n");
}
void game() {
int r = rand() % 100 + 1;
int num = 0;
while (1) {
printf("请输入数字:");
scanf("%d", &num);
if (num == r) {
printf("猜对了\n");
break;
}
else if (num > r) {
printf("猜大了\n");
}
else {
printf("猜小了\n");
}
}
}
int main() {
//设置随机种子的起始数
int a = 0;
srand((unsigned int)time(NULL));
do {
menu();
printf("请选择菜单:");
scanf("%d", &a);
switch (a) {
case 1:
game();
break;
case 2:
printf("退出游戏");
break;
default:
printf("请选择:");
break;
}
} while (a);
return 0;
}