c语言如何随机产生一个数:两种常用写法
c语言如何随机产生一个数,主流依靠
c语言如何随机产生一个数:基础伪随机代码
你在main函数开头调用一次srand((unsignedint)time(NULL)),种子只初始化一次,不要放到循环内部反复调用,重复设置种子会让随机序列重置,出现连续重复数值。rand()函数没有参数,直接调用就得到随机整数,想要限定区间,用取模运算实现,想要[a,b]区间的整数,公式写成rand()%(b-a+1)+a,比如1到10的随机数就是rand()%10+1。
示例代码:include
rand是伪随机。
c语言如何随机产生一个数:随机浮点数写法
rand()输出的是整数,你要小数时,把rand()强制转为浮点类型,除以RAND_MAX,得到0到1之间的浮点数,再做缩放偏移。0到1的浮点数写法为(double)rand()/RAND_MAX,想要2.5到7.5之间的浮点数,公式为2.5+(double)rand()/RAND_MAX*5。浮点随机同样复用前面的srand种子逻辑,种子依旧只初始化一次。
c语言如何随机产生一个数:方案对比
| 方案 | 依赖头文件 | 随机性质 | 适用场景 |
|---|---|---|---|
| rand+srand | stdlib.h、time.h | 伪随机 | 教学、模拟、简单抽奖 |
| 操作系统真随机接口 | 系统相关头文件 | 真随机 | 密钥生成、安全校验 |
time(NULL)的精度是秒级,程序在同一秒内多次启动,会拿到相同种子,生成完全一致的随机序列,这个边界在快速批量启动程序的自动化脚本里很容易碰到,这类场景要改用精度更高的时间源或者硬件随机源。
RAND_MAX是宏定义,由编译器标准库决定,C11标准没有强制规定它的固定值,只约束它至少等于32767,你不要硬编码写死32767参与运算,优先直接使用宏名RAND_MAX,保证代码在不同编译平台上兼容性更好。
不要在循环里写srand。
如果不调用srand,程序默认使用固定种子1,每次运行程序,rand输出的数字序列完全一样,适合调试固定流程,但无法实现随机效果,调试完成后必须补上srand初始化语句。
