rand()%到底是什么意思?

hkk333 2007-10-22 10:24:34
如题,我知道rand()%500是产生0-499的随机数,可是我看windows游戏编程大师技巧好象根本不用srand(),只是使用rand()%n的形式.
另外,一个rand()%n语句在循环语句多次循环中产生的几个值到底是什么关系?完全在范围内的伪随机数?还是递增?还是等差?又或者产生的都是一样的数值?
有知道的能解说下吗?或者给点资料,谢谢
...全文
3325 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkk333 2007-10-23
  • 打赏
  • 举报
回复
特别再问一下,1楼给出的代码是出自MSDN吗?是的话,是哪个版本的?谢谢,看起来是中文的??
hkk333 2007-10-22
  • 打赏
  • 举报
回复
引用
rand()多次循环就有可能产生相同的值,
而rand()%500 经过多次循环生成的数据就是独一无二的.
你可一参考msdn


哦?这个我就不清楚为什么了? msdn看了,但是,搜到的都是讲srand和rand配合使用的...
hkk333 2007-10-22
  • 打赏
  • 举报
回复
谢谢大家
确实用过了,可是很多地方好象也没有用,于是我怀疑rand()%n是不是什么地方的一个宏什么的

不过刚才看了帖子突然想明白,其实%就是取模运算,rand()确实是未设置种子的调用,返回数值是一个伪随机数序列,
rand()%n其实是一个表达式,取模操作的结果就是大于n的数被取余,使之不超过n.
effective_person 2007-10-22
  • 打赏
  • 举报
回复
rand()多次循环就有可能产生相同的值,
而rand()%500 经过多次循环生成的数据就是独一无二的.
你可一参考msdn
cnvb 2007-10-22
  • 打赏
  • 举报
回复
应该只是限制了产生的值的范围吧...其它的实在看不出来了...
quentinliu 2007-10-22
  • 打赏
  • 举报
回复
你看的那本书里也用了srand,如果不用的话,就是每次产生的随机数都是一样的。他好像用的是srand(Gettickcount()),我忘记在那一章看过了,你自己找一下
星羽 2007-10-22
  • 打赏
  • 举报
回复

c语言中产生随机数
rand(产生随机数)
相关函数
srand

表头文件
#include<stdlib.h>

定义函数
int rand(void)

函数说明
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。

返回值
返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。

范例
/* 产生介于1 到10 间的随机数值,此范例未设随机数种子,完整的随机数产生请参考srand() */
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("%d ",j);
}
}

执行
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6




srand(设置随机数种子)
相关函数
rand

表头文件
#include<stdlib.h>

定义函数
void srand (unsigned int seed);

函数说明
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

返回值

范例
/* 产生介于1 到10 间的随机数值,此范例与执行结果可与rand()参照 */
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(" %d ",j);
}
}

执行
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7


64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧