IOS学习笔记54--关于 srand() 和rand()

本文介绍了在iOS开发中遇到的srand((int)time(0))用法,通过学习和实践,解析了这个函数组合的作用,旨在帮助读者理解随机数生成的原理。

   

   今天无意间看程序看到这么个东西:  srand((int)time(0)),然后由于不太懂,就大概查资料,写代码试试了下,先总结如下:

先说说这个的意思 : srand((int)time(0))

srand(seed)用来将随机序列的起始点设为seed
srand((int)time(0))表示以当前时间对应的int值为随机序列起点,这样每次运行程序,由于起点不同才可以得到不同的随机数
time函数给出从1970年1月1日00:00:00至今的秒数,它必须带一个参数,用来存储这个秒数,time()会导致语法错误,time(0)表示秒数不进行存储
### C语言中 `srand` `rand` 函数的用法及区别 #### 头文件 在使用 `rand()` `srand()` 函数之前,需要包含 `<stdlib.h>` 头文件[^1]。 --- #### `rand()` 函数的功能 `rand()` 是一个生成伪随机数的函数。它的返回值是一个介于 0 到 `RAND_MAX`(通常为 32767)之间的整数[^2]。可以通过取模运算 `%` 来限定随机数的范围。例如: - 如果想生成一个范围在 `[0, 99]` 的随机数,可以写成: ```c int v1 = rand() % 100; // v1 取值范围为 0 ~ 99 ``` - 若要生成范围在 `[1, 100]` 的随机数,则应调整表达式为: ```c int v2 = rand() % 100 + 1; // v2 取值范围为 1 ~ 100 ``` - 若需生成更大范围内的随机数,比如 `[1985, 2014]`,则可以这样实现: ```c int v3 = rand() % 30 + 1985; // v3 取值范围为 1985 ~ 2014 ``` 以上示例均基于 `rand()` 返回的伪随机数进行计算[^1]。 --- #### `srand()` 函数的作用 `srand(unsigned int seed)` 用于设置随机数生成器的种子值。如果不手动调用 `srand()` 设置种子,默认情况下 `rand()` 将始终以固定值(通常是 1)作为种子,这会导致每次运行程序时产生的随机序列完全相同[^2]。 为了获得更加“随机”的效果,一般会在程序启动时通过当前时间戳来初始化种子值。具体做法如下: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand((unsigned) time(NULL)); // 使用当前时间作为种子 printf("%d\n", rand()); // 打印一个随机数 return 0; } ``` 这里 `(unsigned) time(NULL)` 表达式的目的是获取当前的时间戳并将其转换为无符号整型,以此作为 `srand()` 的参数[^2]。 --- #### 主要区别总结 | **属性** | **`rand()`** | **`srand()`** | |------------------|-----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | **功能** | 生成伪随机数 | 初始化随机数生成器的种子 | | **依赖关系** | 必须配合 `srand()` 使用;如果没有调用 `srand()`,默认种子为 1 | 不直接参与随机数生成过程,仅负责设定初始条件 | | **返回值** | 整数值,范围为 [0, RAND_MAX] | 无返回值 | --- #### 示例代码 以下是一段完整的示例代码,展示如何结合 `srand()` `rand()` 实现多次随机数生成: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand((unsigned) time(NULL)); // 设定随机数种子 for (int i = 0; i < 5; ++i) { int randomValue = rand(); // 获取随机数 printf("Random Value [%d]: %d\n", i, randomValue); int rangeLimitedValue = rand() % 100 + 1; // 范围限制到 [1, 100] printf("Range Limited Random Value [%d]: %d\n", i, rangeLimitedValue); } return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值