C语言随机数函数使用全解析

随机数rand、srand、time

rand函数的使用

rand() 生成伪随机数,头文件是<stdlib.h>

它返回一个范围在 0RAND_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;

示例:生成 1100 的随机数:

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;
}
相关推荐
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
RainCity5 天前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
LinXunFeng12 天前
Obsidian - 使用 Share Note 分享笔记并自部署
前端·笔记·github
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
Luminous.16 天前
C语言--day30
c语言·开发语言
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽16 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩16 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
闪闪发亮的小星星16 天前
高斯光以及高斯光公式解释
笔记
cqbzcsq16 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息