📄 pi.cpp
字号:
#include<stdio.h>
#define N 200
main()
{ int a,c,m,k=0,x_0,y_0,i;
int x[N],y[N];
float u_x[N],u_y[N],pi;
printf("1.a="); //依次从键盘上输入需要的初值
scanf("%d",&a);
printf(" c=");
scanf("%d",&c);
printf(" m=");
scanf("%d",&m);
printf(" x_0=");
scanf("%d",&x_0);
x[0]=(a*x_0+c)%m; //产生两列上的第一个随机数
for(i=0;i<N-1;i++)
{x[i+1]=(a*x[i]+c)%m;
}
printf("2.a="); //再次依次从键盘上输入需要的初值
scanf("%d",&a);
printf(" c=");
scanf("%d",&c);
printf(" m=");
scanf("%d",&m);
printf(" y_0=");
scanf("%d",&y_0);
y[0]=(a*y_0+c)%m;
for(i=0;i<N-1;i++)
{
y[i+1]=(a*y[i]+c)%m;
}
for(i=0;i<N;i++)
{u_x[i]=(float)x[i]/m; //产生(0,1)区间上的数,即伪随机数
printf("%.2f ",u_x[i]);//输出显示产生的伪随机数u_x列
}
printf("\n");
for(i=0;i<N;i++)
{u_y[i]=(float)y[i]/m; //产生(0,1)区间上的数,即伪随机数
printf("%.2f ",u_y[i]); //输出显示产生的伪随机数u_y列
}
for(i=0;i<N;i++)
{if((u_x[i]-(float)1/2)*(u_x[i]-(float)1/2)+(u_y[i]-(float)1/2)*(u_y[i]-(float)1/2)>(float)1/2*1/2)
;
else k++; //k记录满足在内切圆内的掷点的个数
}
printf("\n%d",k);
pi=(float)4*k/N; //计算概率,求出pi值
printf("\npi=%.2f",pi); //输出pi值 保留两位小数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -