c语言中 a[i][j]=rand()/1000+1;是什么意思;随机发生函数rand()是怎么随机发生的,有什么范围吗??

如题所述

MSDN中关于rand的描述"The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand."
rand()产生的伪随机数的范围是0到32767,一般想要产生比如[5,125]的随机数,可以这么写:
int x = rand()%120 + 5;
其中120是区间长度。
rand()产生的随机数是“伪随机数”,就是有可能在你的机器上运行,每次运行程序产生的随机数序列都是一样的,因此需要使用srand()解决这个问题:
#include <time.h>
srand(time(NULL)); //这句放在任何的rand()之前,且只需使用一次追问

time(NULL)的作用是什么,srand()函数有什么用,rand()产生的随机数每次都是一样的吗 为什么会这样呢 那样还叫随机产生吗

追答

这个跟计算机内部实现有关,所以rand()是“伪随机数”产生函数,注意,是“伪随机数”而不是“随机数”,如果每次srand()给的参数值相同,那么rand()产生的序列就是相同的。time(NULL)返回的是从某年的1月1日0时0分0秒开始(这个年份记不清了)到系统当前时间所经过的秒数,所以如果不是同一秒钟以内多次运行程序的话,time(NULL)的返回值一定是不同的,用这样的方式来产生相对比较随机的序列。

参考资料:MSDN

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-13
谁教你这样写的?
这样写是有很大的漏洞的!
因为你不知道编译器提供的rand()产生随机数的范围!
所以除以1000是毫无头脑的做法!
如果要产生a~b之间的随机数
楼主你可以这样做:
rand()%(a-b)+a;
这样做是肯定不会出错的!
也是最合理的做法!
至于原理,楼主你自己先好好想想,相信你的智慧能马上想通 的!追问

不是,前面还有程序,我也想不懂为什么要除1000,rand()%a+x我可以理解 程序是这样的
main()
{
int n,m,i,j,t,a[20][20];
printf("请输入数字矩阵的行数及列数n,m:");
scanf("%d,%d",&n,&m);
t=time(0)%1000;srand(t);//这里我想不明白什么意思。。。
for(i=1;i<=n;i++)
{
printf("\n");
for(j=1;j<=m;j++)
{
a[i][j]=rand()/1000+1;
printf("%4d",a[i][j]);
}
}
printf("\n");
}

追答

t=time(0)%1000;srand(t);//这里我想不明白什么意思。。。

这个是设置一个随机种子,你可以去百度百科查一下rand函数的定义,可能需要多看几遍才能看懂,那个解释非常详细的。

追问

非常感谢哦

第2个回答  2011-11-13
rand是取随机数的函数。你给出的语句意思就是说:a[i][j]这个数等于rand()这个函数产生的一个随机数,除以1000后再加1……

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网