代码示例如下:
#include<stdioh>
#include<stdlibh>
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。
扩展资料:
C语言随机函数指针位置
void srand( unsigned int seed )
改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。
基于毫秒级随机数产生方法:
#include<windowsh>
种子设为:srand(unsigned int seed);
srand(GetTickCount());
参考资料:
做了一段VBA代码,需要抱走。是随机生成的三种,觉得不想要,就多点几次运行。
Sub 随机()
Dim q1%, q2%, q3%, q4%, q5%
Range("c2:c13")ClearContents
q1 = Range("b14")
q3 = q1
For q2 = 2 To 13
q5 = Int(q3 / Cells(q2, 2))
If q5 = 0 Then
ElseIf q5 <> 0 Then
q4 = ApplicationRandBetween(1, q5)
Cells(q2, 3) = q4
q3 = q3 - q4 Cells(q2, 2)
End If
Next
End Sub
在excel中有时候会用到随机函数,其中rand函数是一个可以生成随机数的函数,成数范围是大于等于0小于1,下面就演示随机RAND函数的用法,很实用,很方便!
工具/原料excel
方法/步骤1RAND()只能显示0-1之间的随机数,但是加入我们用RAND()90,那么是不是就是0-90之间的随机数了呢,这个应该不难理解,同时我们在用RAND()90+10是不是就是10-100之间的随机数了呢。
2意思就是如果我们要取a-b之间的随机数,那么我们就只需要输入=RAND()(b-a)+a就可以了。
将号码和名字对应的表格事先做好,放在sheet2里
利用randbetween( )函数,具体做法如下:
在sheet1中,选中一个单元格,在单元格中输入=RANDBETWEEN(1,15),这个公式的意思是选出介于1到15的随机数。
利用index( )函数,将随机取出的数字和名字相对应,具体做法如下:
在前面randbetween( )函数里面添加index( )函数,函数是这样的:=INDEX(Sheet2!B1:B15,RANDBETWEEN(1,15))
完成后按下F9键,会随机显示所有的名字。松开F9键,即显示一个随机的名字。
5
如果需要界面好看一点,也可以插入一张抽奖的背景。
rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(我们可以称它为种子)为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,我们是可以产生可以预见的随机序列,那我们如何才能产生不可预见的随机序列呢?我们可能常常需要这样的随机序列,利用srand((unsign)(time(NULL))是一种方法。
把
srand(
time(0)
);
放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了?
因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要一个种子。
你把
srand(time(0))
放到循环前面就可以了。
原因:
time(0)返回的是系统的时间(从197011午夜算起),单位:秒,而那个循环运行起来耗时连0000001秒都不到!
也就是说,srand(time(0))
连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。
如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand
就不一样了但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。
另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)