乱数を発生させて、平均と分散を求める
/*2kadai02-1.c*/

/*ran1の定義*/
#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)

double ran1(long *idum)
{
int j;
long k;
static long iy=0;
static long iv[NTAB];
double temp;

if (*idum <= 0 || !iy){
if (-(*idum) < 1) *idum=1;
else *idum = -(*idum);
for (j=NTAB+7;j>=0;j--) {
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR*k;
if (*idum <0) *idum += IM;
if (j <NTAB) iv[j] = *idum;
}
iy=iv[0];
}
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR*k;
if (*idum < 0) *idum += IM;
j=iy/NDIV;
iy=iv[j];
iv[j] = *idum;
if ((temp=AM*iy) > RNMX) return RNMX;
else return temp;
}

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double ran1(long *);
main()
{
long *idum;
int total;
int k;
double g;
double m,n,a,b;
*idum =-1;
printf("乱数を何回発生させますか?:");
scanf("%d",&total);
m=0.0;
a=0.0;
for(k=0;k<total;k++)
{g=ran1(idum);
m=m+g;
a=a+g*g;
}
m=m/(double)total;
printf("平均は%lfです。",m);
n=m*m;
a=a/(double)total;
b=a-n;
printf("\n分散は%lfです。\n",b);
}

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送