随机函数相关问题? 200

 我来答
尹树香
高能答主

2021-02-28 · 致力于成为全知道最会答题的人
知道小有建树答主
回答量:4793
采纳率:55%
帮助的人:278万
展开全部
在使用过程中发现每次重新打开工作簿时,执行一次Rnd函数的宏,都会得到一个相同的随机数,后来看了一下“帮助”,在Rnd函数前加入Randomize就可以解决这一问题,但本人还是有点不放心,是不是这样做就会产生一个真正的随机数呢
最好能“剖析”一下Rnd,Randomize工作原理,越详细越好,即详细又准确的会加20分
多谢了,高手们!问题补充:

有如下命令:
Randomize
for a=1 to 6
cells(1,a)=rnd
next a
这是一个产生6个随机数的例子,如果前面没有Randomize时每次打开工作簿会产生同一个6个数的数列,那么加了Randomize(在For语句前)后,那这6个数之间的排列关系(注意:不是指这6个数的数值本身,数值本身应该是变的)是不是还是没变呢?
如果还是没变,那把Randomize加在For语句后cells前,那是不是就会改变呢?
如果还是没变,那有什么办法可以使这6个数完全随机化么?
满意答案

gupiao0000019
LV12
2013-08-29
Randomize Timer 用这个 它会以当前时间作为随机数种子,之后再产生的随机数就确实是真真正正的随机的了。

Rnd 每次执行都会合上一次Rnd的结果有关,也就是说是用上一个Rnd的结果演算过来的,所以
如果不进行初始化,那么一串 rnd 执行多少次 都一样。

只要使用了 Randomize timer之后 就相当于从一个时间点初始化了Rnd一下,那一串rnd 就不会再每次都一样了 ,因为 timer 函数 每次的时间都不一样
生活百事咖
高粉答主

2021-02-27 · 醉心答题,欢迎关注
知道大有可为答主
回答量:1.4万
采纳率:77%
帮助的人:434万
展开全部
随机数字
(1)生成随机数比较简单,=RAND()即可生成0-RAND_MAX之间的随机数;(#define RAND_MAX 0x7fffu)
(2)如果要是整数,就用=INT(RAND()*10,表示0至9的整数,以此类推;
(3)如果要生成a与b之间的随机实数,就用=RAND()*(b-a+1)+a,就能产生固定位数的整数了,以此类推;
注意:如果要使用函数RAND()生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。不过,这样只能一个一个的永久性更改,如果数字比较多,也可以全部选择之后,另外选择一个合适的位置粘贴,粘贴的方法是点击右键,选择“选择性粘贴”,然后选择“数值”,即可将之前复制的随机数公式产生的数值(而不是公式)复制下来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2021-02-27 · TA获得超过2.6万个赞
知道大有可为答主
回答量:2.9万
采纳率:35%
帮助的人:1110万
展开全部
rand()函数的返回值就是求取随机的值,所以如果没有对数据有要求,直接这样写:
printf("%d", rand());//输出一个随机数.
但如果对数有要求,如小数或在一定值以内:
小数:rand()/100.0 //100.0后面的.0必须写,得到一个小数点后有两位小数的小数。
一定范围内的数:rand()%m+n //m是数据区间差,n是最小值
如:求[ 100,120)之间的数就是:rand()%20+100
rand()函数得到的是一伪随机序列,即,每次运行时,得到的随机序列是相同的(这是为了保证调试程序时,每次保持相对稳定的数据,便于查找程序问题)。为了得到不同的随机序列,系统提供了srand(int n)函数设置随机种子,n值不同时,就会得到不同的随机序列,常用方法为:
srand(time(NULL)); //time的返回值是当前系统时间(秒数),因为每次运行时的时间不同,time的结果就会是不同的值,这样,srand()设置的种子就会不同,得到的随机序列也就会不同。
time在<time.h>中声明
rand,srand在<stdilb.h>中声明
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式