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;
}
相关推荐
Cloud_Shy6181 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
chase。2 小时前
【学习笔记】Dexora:面向高自由度双臂灵巧操作的开源 VLA 系统
笔记·学习
風清掦2 小时前
【STM32学习笔记-15】FLASH 闪存(Claude)
笔记·stm32·单片机·嵌入式硬件·学习
玖玥拾2 小时前
C/C++ 数据结构(二)双向链表
c语言·数据结构·c++
chase。2 小时前
【学习笔记】Unified World Models:基于视频-动作耦合扩散的机器人预训练新范式
笔记·学习·音视频
dnbug Blog3 小时前
C 程序基本结构
c语言·程序结构
QiLinkOS3 小时前
极客精神与商业思维的融合实践(2)
c语言·c++·人工智能·算法·开源协议
不会C语言的男孩3 小时前
Linux 系统编程 · 第 2 章:系统调用与库函数
linux·c语言
影寂ldy3 小时前
C# 事件完整学习笔记(发布订阅 + 自定义事件 + 内置 EventHandler)
笔记·学习·c#