韩国男艺人喜欢王霏霏:如何制作随机数 C语言……
随机种子是怎么选取的呢?
随机数的计算函数是怎么写的呢?
麻烦给一个利用WINDOWS的时钟的秒数来计算随机数的函数吧!
注:只给程序的不于加粉,程序加注释,回答有汉字,有详细的数据结构及算法的讲解。越详细越好!回答的好的,另再加分
首先使用srand(unsigned int)函数设置种子,然后使用rand()返回一个随机数。
使用这两个函数时需要包含头文件
#include <stdlib.h>
1、在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关;
2、因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数;
3、通常通过为随机数生成器提供一个新的随机种子来达到使程序在每次执行时都能生成一个新序列的随机值的效果。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器;
示例代码:
#include <time.h> //用到了time函数
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i, number;
srand((unsigned int) time(NULL)); //用时间做种,每次产生随机数不一样
for (i=0; i<10; i++)//产生10个随机数
{
number = rand() % 12 + 1;//产生1-13的随机数
printf("%d\n", number);
}
return 0;
}
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
void main()
{
int i,k,range,n,a[100];
int min,max,flag=0;
long t;
double j;
min=50;
max=500;
range=max-min;
srand((unsigned)time(&t)); /* 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;*/
do{ for(i=0;i<100;i++)
{
n=rand(); /*调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)
根据需要多次调用rand(),从而不间断地得到新的随机数;*/
j=((double)n/(double)RAND_MAX); /*把随机数除以RAND_MAX,从而产生一个在0到1之间的校正值;*/
n=(int)(j*(double)range); /*把校正值乘以所需要的范围值(即500-50)从而产生一个在0到43之间的值*/
n+=min; /*把该值和所要求的最小值相加,从而使该值最终落在正确的取值范围----1到44之间。*/
a[i]=n;
}
for(i=0;i<99;i++) /* 判断这100个数是否重复,如果是,再生成一次,直到各不相同为止,也可以不要这段,呵呵*/
{ for(k=i+1;k<100;k++)
if(a[i]==a[k]) flag=1;flag=0;}
}while(flag);
printf("The random number is:\n"); /*产生100个50—500个随机数,并且排成10行10列*/
for(i=0;i<100;i++)
{ printf("%d ",a[i]);
if((i+1)%10==0) printf("\n");}
}
多给点悬,我告诉你
伪随机数用rand();但是每次的数都一样。比如这个程序执行一次,第一次得到的数是1,那关掉下次再执行,第一个数还是1~~
用时间作随机数很简单,在调用前加上srand( (unsigned)time(NULL));就可以了。这样在调用随机数前,基调用了时间的基数,每次生成的数都不一样,形成了真正的随机数。
#include <stdio.h> //头文件
main()
{int n1;
srand((unsigned)time(NULL)); //利用时间作原子,这样第一次产生的随机数就不同了
n1=abs(rand()%100)+1;//产生随机数
printf("%d\n",n1);//显示
}