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;
}
相关推荐
茯苓gao31 分钟前
机器人产业的三级火箭:卖电机、卖模组与卖整机,三种商业模式的终局推演
笔记·学习·机器人
LuminousCPP1 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
SuperByteMaster1 小时前
__set_MSP 和__set_MSPLIM 接口区别
c语言
马里马里奥-1 小时前
大模型应用开发笔记04:LangChain 工具(Tool)与中间件(Middleware)详解
笔记·中间件·langchain
乐橙开放平台3 小时前
巡店系统笔记:乐橙 listDeviceDetailsByPage 台账 + bindDeviceLive 辅码流最小闭环
网络·笔记·物联网·自动化·音视频·智能家居
CS创新实验室3 小时前
NumPy数组的C风格和Fortran风格
c语言·开发语言·numpy
LuminousCPP4 小时前
单链表专题(应用篇):三道经典题吃透删除、反转与快慢指针
c语言·数据结构·笔记
女神下凡5 小时前
WorkBuddy、TraeWork、QWork 完整区别对比
ide·人工智能·笔记
薄情书生5 小时前
基于51单片机的电子钟设计(LCD12864显示 + DS1302)
c语言·51单片机·protues
疯狂打码的少年5 小时前
【软件工程】需求工程:需求规格说明与需求验证
笔记·软件工程