C语言中随机数的简单总结
来源:互联网 发布:古典白话小说推荐知乎 编辑:程序博客网 时间:2024/05/16 18:23
#include <stdio.h>#include <stdlib.h>#include <time.h>#define MAXNUM 10#define MINNUM 1int main(void){ srand((unsigned int)time(0)); for ( int i = 0 ; i < 10 ; i ++ ) { printf("%d\n", rand()%( MAXNUM - MINNUM + 1 ) + MINNUM ); } return 0;}
如果想生成每次启动程序不同的伪随机数,首先我们需要使用srand()进行“撒种”。srand()接受一个 unsigned int 型参数。而且,传进去的参数需要在每次程序启动时不同。一种比较广泛的做法是传入当前的时间。我们使用time()函数来获取日历时间。time()函数的原型为:
time_t time (time_t* tp);“ time函数返回当前日历时间。如果无法获取日历时间,则返回值为-1。如果 tp 不为 NULL,则同时将返回值赋给 *tp。”《C程序设计语言 第二版》
那 time_t 又是什么呢?我在 MinGW 4.8.1,32-bit Application,Windows 8.1 Update x64 环境下查看了定义:
typedef __int64 __time64_t; typedef __time64_t time_t;哦,就是一个__int64啊。那还是转换一下类型的好啊。C语言里unsigned和signed之间的转换实在头疼。C++之父 Bjarne Stroustrup 在回应 Linus 对 C++ 批判的时候说道:
“C isn't simple: Please explain the rules for conversion from unsigned short to int.”我是explain不出来。
再看看rand()。
“函数rand()生成介于0和RAND_MAX之间的伪随机整数序列。” 《C程序设计语言 第二版》
之前在网上查到说如果想输出X~Y的随机数可使用如下方法:
rand()%(Y-X+1)+X;
道理我想是显而易见的。
MSDN ( http://msdn.microsoft.com/zh-cn/library/398ax69y.aspx )的示例中也给出一种需要double的方法。摘录代码如下:
道理我想是显而易见的。
MSDN ( http://msdn.microsoft.com/zh-cn/library/398ax69y.aspx )的示例中也给出一种需要double的方法。摘录代码如下:
int u = (double)rand() / (RAND_MAX + 1) * (range_max - range_min) + range_min;printf( " %6d\n", u);
不过鉴于double计算比起int实在慢太多,所以不建议使用。
0 0
- C语言中随机数的简单总结
- C语言随机数的总结
- C语言 随机数的简单研究
- C语言中产生随机数的方法
- C语言中产生随机数的方法
- C语言中产生随机数的办法
- C 语言中随机数的生成
- C语言中随机数的产生
- C语言中随机数的生成,以及简单猜数游戏的实现。
- C语言中strand() rand() time()函数的简单介绍及获取随机数的方法
- C语言中如何写一个简单可移植而又足够随机的随机数生成器
- 【C语言总结】C语言随机数发生器
- C语言的随机数
- c语言中字符搜索函数的简单总结
- c语言中产生随机数
- c语言中产生随机数
- C语言中随机数产生
- c语言中取随机数
- 《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用
- winscp和putty登陆不上原因
- java框架与对应的jar包
- winform中DataGridView全选和反选
- 2014北京邀请赛E题-矩阵快速幂
- C语言中随机数的简单总结
- Java安全通信:HTTPS与SSL
- numpy中的知识点 (不断更新~)
- NYOJ 239 月老的难题 (深度优先遍历)
- 黑马程序员—IO流字符写入流的缓冲区
- 模板
- 在word中插入目录,不把目录的页数计算在内
- 开发板挂载NFS系统
- Java安全通信概述