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;
}
相关推荐
筱谙3 分钟前
BES BLE CTKD 完整学习笔记
笔记·学习
会编程的土豆6 分钟前
数据库mysql八股
数据库·笔记·八股
数据皮皮侠AI8 分钟前
退市监督数据(2000-2024)
大数据·人工智能·笔记·机器学习·回归
神明不懂浪漫3 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
碎光拾影14 小时前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch14 小时前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
疯狂打码的少年17 小时前
【软件工程】软件质量保证(ISO/IEC 9126质量特性)
笔记
wuyk55517 小时前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
无相求码19 小时前
C程序的内存到底怎么分的?栈、堆、全局区一张图讲清楚
c语言
龙仔72520 小时前
SQL Server OS_Core 数据库全自动备份【完整笔记·可直接复用】
数据库·笔记·oracle