【C语言】随机数函数rand和srand
【C语言】随机数函数rand和srand
文章目录
一、随机数函数
1.rand()、srand()
2.time()
二、案例实现
1.案例描述
2.代码实现
一、随机数函数
1.rand()、srand()
C语言产生随机数要用到的函数是rand()和srand()。random()函数不遵循ANSIC标准,在gcc、vs等编译器下不能通过编译。
(1)若是为了生成一个无范围限制的随机数,只需要使用rand()即可。
rand()返回一个随机数,范围为0~RAND_MAX。RAND_MAX定义在stdlib.h中,其值为2147483647。
(2)如果要生成某个范围内的随机数,有两种情况:
①从0开始的随机数,例如:生成0~10的随机数,利用rand()函数对10求余,即rand()%10;
②不从0开始的随机数,例如:生成5~25的随机数,利用rand()函数对25-5=20求余再加上5,即rand()%20+5.
(3)以上两种情况生成的随机数都是一次性的,以后无论再运行几次,输出的结果都将与第一次相同。为了使程序在每次执行时都能生成一个新序列的随机值,需要为随机数生成器提供一个新的随机种子。此时需要使用srand()函数,该函数为随机数生成器播撒种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。
函数原型:void srand(unsigned int seed);
该函数的参数seed是种子,用来初始化rand()的起始值。
功能为:从srand(seed)中所指定的seed开始,返回一个在[0,RAND_MAX]之间的随机整数。rand()函数是真正的随机数生成器,srand()为rand()提供随机数种子。srand((unsigned int)time(NULL)) 表示使用系统定时器的值作为随机数种子。
系统在调用rand()函数之前会自动调用srand()函数,如果用户在调用rand()函数之前没有调用srand()函数,那么系统就会默认将1作为伪随机数的初始值。如果用户调用过srand(),并给参数seed赋一个值,那么rand()函数就会将此值作为产生随机数的初始值。如果给seed一个固定值,那么rand()函数产生的随机数将会是一样的。
2.time()
通常使用系统时间来进行初始化,即使用time()函数获取系统时间,它的返回值为time_t类型,要转换为unsigned int 类型之后再传给srand()函数。使用time()函数还需要调用“time.h”头文件。
使用time()函数,其参数一般为NULL,即直接传入空指针即可。如果觉得时间间隔太小,可以乘上合适的整数,例如:srand((unsigned int)time(NULL)*5)。
二、案例实现
1.案例描述
一盘游戏,两个人轮流掷骰子5次,并将每次掷骰子的点数累加,5局后,累计点数较大的一方获胜,否则为平局。
2.代码实现
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main() {srand((unsigned int)time(NULL));//使用系统计时器的值作为随机种子int res1 = 0, res2 = 0;for (int i = 1; i <= 5; i++) {res1 += rand() % 6 + 1;//生成1~6的随机数,并进行累加 res2 += rand() % 6 + 1;//生成1~6的随机数,并进行累加 }printf("甲方点数:%-5d 乙方点数:%5d\n", res1, res2);if (res1 > res2) {printf("甲方获胜\n");}else if (res1 < res2) {printf("乙方获胜\n");}else {printf("平局");}
}
- 俞敏洪在北京大学2008年开学典礼上的演讲辞
- XML是什么?有什么用?
- 【大数据AI人工智能】图数据库的发展脉络与技术演进
- [林达华]介绍几本数学书
- 【林达华】How To Get A Solution
- 教你如何注册winrar~
- python中的platform模块获取平台信息
- php json数据值,php操作JSON格式数据
- GridView选中状态
- .MMAP是什么格式?
- mmap函数使用
- k8s资源限制——资源的配额管理(Resource Quotas)
- C语言void指针的用法
- 1024专场回顾
- CLion 插件
- curl命令详解 (curl
- 【STM32学习笔记】(13)——外部中断详解