求助C++一个小程序不知道错哪儿了,大侠来帮改改
#include<iostream>#include<cmath>
#include<cstdio>
#include<cstdlib>
#define PI 3.141592
using namespace std;
float WR,WA;
int NA,NP,NR,I,K,L;
float WP;
float a,U,P,X;
int N,D,M=0;
float COLIN()
{
int d=10;
float U=(rand()%11)/10;//注意随机函数的使用
M=M+1;
P=-d*log(1.0*U);// 我感觉错在X值的改变上,一致使主程序的X达不到响应值,跳不出循环,错误应在这里,
a=2*PI*U;
X=X+P*cos(1.0*a);
return X;
}
void STAT()
{
WP=(1.0*NP)/(1.0*N);
WR=(1.0*NR)/(1.0*N);
WA=(1.0*NA)/(1.0*N);
if(WP>=0.01)
{
printf("%f\n",WP);
D=D+2;
}
else
printf("D=%d\tWP=%f\tWA=%f\tWR=%f\tM=%d\n",D,WP,WA,WR,M);
}
int main()
{
D=30;// D的值变动
printf("请输入中子数:");
scanf("%d",&N);
do
{
NA=NP=NR=I=L=K=0;
X=0;
while(I<N)
{
I=I+1;
K=1;
X=1;
COLIN();//改变X的值
L=1;
do
{
if(K==10)
{
NA=NA+1;//表明中子在里面碰撞10次被吸收
//cout<<"NA="<<NA<<endl;
}
else
{
if(X>D)NP=NP+1;
else
{
if(X<0)NR=NR+1;
else //表明中子反弹后继续运动
{
COLIN(); //改变X的值
// cout<<"sjdflks"<<endl;
K++;
// cout<<K<<endl;
L=0;
}
}
}
}while(L!=0);//do
}//while(I<N);
STAT();
}while(WP<=0.01); //do第一层 我感觉这里的WP应该是WP>0.01
//system("pause");
}