C语言中如何生成某个范围的随机数

本文详细介绍了如何在C语言中利用rand(),srand()和time()函数生成随机数,包括随机数的范围设定和使用时间戳确保每次运行的随机性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中生成某个范围的随机数,需要用到的是rand,srandtime这几个函数。

1.关于rand函数

头文件

<stdlib>

使用声明

给ret了一个从0到RAND_MAX的数

int ret=rand()

使用说明

rand函数会返回一个范围在 0 到 RAND_MAX 之间的伪随机数,RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。

注意

仅仅使用rand函数不能实现生成随机数的功能

	int ret = rand();
	printf("%d", ret);

当我们打印出ret的值时,会发现结果如下

无论程序运行多少次结果都是41

只使用rand函数似乎不能每次运行程序都生成一个随机数

于是,我们便需要使用srand和rand一起搭配使用



2.关于srand函数

头文件

<stdlib>

使用声明

void srand(unsigned int seed)

可以看出srand不返回任何值,且srand需要输入的是一个unsigned int 类型的数值

使用说明

srand会设置一个rand生成的随机数的起点


也就是说只有srand中的输入值是一个随机数,rand才能做到每次程序运行的时候生成的都是不同的随机数

看起来似乎矛盾了

我们想要生成一个随机数,去需要输入一个随机数

怎么办?

什么东西一直在变?

没错,就是时间

我们便需要用到时间戳

什么是时间戳?


时间戳

一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

通俗点说就是表示某一刻的时间


在网上有很多时间戳转换工具,很多在线工具

打开后界面如下

可以更直观的发现:时间戳与时间之间可以相互转换

而时间每时每刻都在变化,时间戳也在不断变化,正满足了srand函数输入随机数的需要

在C语言中我们如何去调用时间戳呢?

便要用到time函数


3.关于time函数

头文件

<time.h>

使用声明

time_t time(time_t *seconds)

可见time函数返回的是一个time_t类型的值,需要输入的是一个指针

这个函数原理比较复杂

对于只想调用时间戳的我们,暂时不需要了解

当我们使用的时候,给予一个NULL即可

#include<time.h>
time(NULL)

了解了这三个三个函数之后

我们便可以生成随机数了

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
srand((unsigned int)time(NULL));
int ret=rand();
printf("%d",ret);
return 0;
}

程序每次运行的时候便能生成不同的随机数

注意

srand((unsigned int)time(NULL));

这条语句必须在程序的最开始便设定

且由于时间的特殊性,如果两次运行程序的时间小于1秒,会导致生成的随机数相同

关于生成某一范围的随机数

我们现在已经能生成一个随机数了,但是如何规定一个随机数的范围呢?

我们可以用到取模的运算法则

不管A和B取什么值,A%b的结果都会是不大于B的一个数

所以

若我们想在0-100生成随机数

只需要在上面的代码稍作修改即可

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
srand((unsigned int)time(NULL));
int ret=rand()%101;
printf("%d",ret);
return 0;
}

如此便可以生成一个0-100的随机数

若想生成1-101呢?

在取模后加一即可

如此,便在C语言中成功生成某个范围的随机数

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值