C语言求解随机函数random

C语言求解随机函数random,第1张

vc6.0下运行:

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void main()

{

int a[101],b[101]={0},i,j,k=0,t=0

srand(time(0))

for (i=0i<100i++)

{

a[i] = rand()%90 + 10//产生10~99的整数

if (a[i] % 2 == 0)

{

k++

b[t++] = a[i]

}

}

printf("未排序时数组b的元素:\n")

for (t=0,i=0i<ki++)

{

printf("%d ",b[i])

t++

if (t % 10 == 0)

printf("\n")

}

printf("\n\n")

//排序

for (i=0i<k-1i++)

{

for (j=k-2j>=ij--)

{

if (b[j] >b[j+1])

{

t = b[j]

b[j] = b[j+1]

b[j+1] = t

}

}

}

printf("排序后数组b的元素:\n")

for (t=0,i=0i<ki++)

{

printf("%d ",b[i])

t++

if (t % 10 == 0)

printf("\n")

}

printf("\n")

}

srand((int)time(NULL))用于设定随机数种子。 rand()%100,产生0-99的随机数。如果要产生16-59之间的数,可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况与此雷同。

rand()是不能产生真正的随机数的。即使不能产生真正的随机数,也要大概接近。而rand()好象每次的随机都一样。之所以rand()每次的随机数都一样是因为rand()函数使用不正确。

各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。

扩展资料

调用随机数函数 rand()() 的时候, 实际得到的这个随机数并不是绝对随机的,它是以一个初始值,通过一个算法,计算出来的“伪随机数"数列,每次调用rand()()时,从这个数列依次取出一个值,做为随机数。

这个初始的值就是"随机数种子", 也就是说,如果随机数种子相同,计算出的随机数数列是相同的。而srand()om( x) 这个函数就是初始化随机数产生器,设定随机数种子用的。给定的x的就是随机数种子。可以验证,当你多次调用srandm(x)时,如果x取值相同,则得到的随机数数列是一样的。

所以,若我们每次运行程序时,要得到不同的随机数序列,就应该用不同的种子来初始化这个随机数产生器。比如说,用时间初始化它,或者用getpid(),用进程的pid号初始化,由于每次运行程序时,它的pid号一般是不同的,所以能够产生不同的随机数序列。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12010113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存