C语言函数:rand()函数和srand()函数 入门理解

在讲srand和rand这两函数之前,先给大家讲一个种子的故事:

“一颗种子的故事”

        “种子”就是现实生活中的种子,你把他种在土里,他长出什么果实你是不知道的,一个随机的你不知道是什么品种的植物种子长出的果实也是随机的你不知道的;

       不同品种的种子长出的果实是不同的;

       相同品种的种子长出的果实是相同的。

     srand函数就是“种子”,rand函数就是“果实”。srand(参数)函数的参数就是“种子的类型”。

     所以,在c语言中就有这么一个搭配:

     srand(n);//一个n类型的种子

     rand();//n类型的种子长出来的果实

     当n是同一个数字的时候,rand()生成的数相同;当n不是同一个数字的时候,rand()生成的数不同;当n未知的时候,rand()生成的数未知。

然后,我们从理论的角度进一步深入了解rand和srand函数:

srand——函数(随机种子)

函数原型void srand(unsigned int seed);

函数功能:

设置随机数生成器的种子。

函数参数:

通常情况下,我们使用time(NULL)(如果不知道time函数,见本文章后,先了解一下time函数)作为种子,以保证每次运行程序时生成的随机数序列都不同。

——因为time函数时时变化,时时刻刻都不同,所以“种子的类型”就实时变化,就可以保证“种子结出的的果实(随机数)”是时时刻刻都不同的。

函数返回值:

当函数参数seed为1时,就是srand的初始值。

例如:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main() {

    srand(time(NULL)); // 使用系统时间作为种子

    printf("%d\n", rand()); // 生成一个随机数

    return 0;

}

Rand——函数(随机数)

函数原型int rand (void);

函数作用:

提供随机的数字,生成一个范围在0到RAND_MAX之间的随机整数。

其中RAND_MAX是一个常量,它的值通常是32767。

函数参数:Void

函数返回值:

函数返回值是一个范围在0到RAND_MAX之间的随机整数,其中RAND_MAX是一个常量,它的值通常是32767。

如果需要生成指定范围内的随机整数,可以使用取模运算符%来实现。

例如,要生成一个范围在a到b之间的随机整数,可以使用以下代码:

其中,a是起始值,b是终止值,num是生成的随机整数。

 int num = rand() % (b - a + 1) + a;

v1 = rand() % 100;       

  // v1 in the range 0 to 99

v1 = rand() % (99-0+1)+0;

v2 = rand() % 100 + 1;    

 // v2 in the range 1 to 100

v2 = rand() % (100-1+1)+1;

v3 = rand() % 30 + 1985;

  // v3 in the range 1985-2014

v3 = rand() %  (2014-1985+1)+1985;

需要注意的是,rand()函数生成的随机数是伪随机数,它是通过一个算法生成的,而不是真正的随机数。这种取模运算不会在区间内生成均匀分布的随机数(因为在大多数情况下,这种运算更可能生成较小的数字)。如果需要生成更加随机的数,可以使用srand()函数设置随机数种子。

两个与时间有关的概念:他们分别是time_t与time()

time_t——数据结构:

time_t是C/C++语言中的一种数据类型,它是用来存储从1970年1月1日0时0分0秒(UTC)到现在的秒数的。在C中,time_t类型通常定义为long int。

time()——函数:

简介/概述:

Time函数就是获取从1970年1月1日0时0分0秒(UTC)到现在的秒数的,他随着时间的变化不停变化

详情:

函数原型time_t time (time_t* timer);

函数功能:

获取当前时间(从1970年1月1日0时0分0秒(UTC)到现在的秒数。)

返回值:

time_t(从1970年1月1日0时0分0秒(UTC)到现在的秒数。)

参数:

time(NULL)可以是空指针,在这种情况下不使用参数,返回类型的值依然是(从1970年1月1日0时0分0秒(UTC)到现在的秒数。)

头文件:

#include <time.h>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zorita.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值