武侠群英传1详细攻略:请好汉们帮我看看下面用TC编写的程序到底有什么问题,我奋战了两天都没弄明白

来源:百度文库 编辑:神马品牌网 时间:2024/05/06 18:29:28
#include <stdio.h>
#include <math.h>

double A,P,func1(float x)
{
double y1;
y1=exp(A*P*x*x);
return(y1);
}
double func2(float x)
{
double y2;
y2=0.5*(3*x*x-1)*exp(A*P*x*x);
return(y2);
}
main()
{
double a,b,result1,result2,g,T;
int n,rtn1,rtn2,flag,M;
double func1(),func2();

printf("T=");
scanf("%f",&T);
A=T;
g=-1;
M=0;

n=8;
a=0;
b=3;
flag=0;

do
{
P=g;
M++;

rtn1=gaussp(a,b,n,&result1,flag,func1);

if(rtn1==0)
{
printf("\nN|Result1\n");
printf("%d|%f\n",n,result1);
}
else
printf("\nIt's wrong.Return code is %d\n",rtn1);

rtn2=gaussp(a,b,n,&result2,flag,func2);

if(rtn2==0)
{
printf("\nN|Result2\n");
printf("%d|%f\n",n,result2);
}
else
printf("\nIt's wrong.Return code is %d\n",rtn2);

g=result2/result1;
}
while(abs(g-P)>0.01);
printf("P=%f",g);
printf("Times of Cycle: %d",M);
}

int gaussp(a,b,n,result,flag,func)
float a,b;
int n,flag;
double *result;
double (*func)();
{
float x[8][8]=
{
{0.5773503,0,0,0,0,0,0,0},
{0.8611363,0.3399810,0,0,0,0,0,0},
{0.9324685,0.6612094,0.2386192,0,0,0,0,0},
{0.9602899,0.7966665,0.5255324,0.1834346,0,0,0,0},
{0.9739065,0.8651634,0.6794096,0.4333954,0.1488743,0,0,0},
{0.9815606,0.9041173,0.7699027,0.5873180,0.3678315,0.1252334,0,0},
{0.9862838,0.9284349,0.8272013,0.6872929,0.5152486,0.3191124,0.1080549,0},
{0.9894009,0.9445750,0.8656312,0.7554044,0.6178762,0.4580168,0.2816036,0.09501251},
};
float f[8][8]=
{
{1,0,0,0,0,0,0,0},
{0.3478548451374539,0.6521451548625461,0,0,0,0,0,0},
{0.1713244923791703,0.3607615730481386,0.4679139345726910,0,0,0,0,0},
{0.1012285362903763,0.2223810344533745,0.3137066458778873,0.3626837833783620,0,0,0,0},
{0.0666713443086881,0.1494513491505806,0.2190863625159820,0.2692667193099964,0.2955242247147529,0,0,0},
{0.0471753363865118,0.1069393259953184,0.1600783285433462,0.2031674267230659,0.2334925365383548,0.2491470458134028,0,0},
{0.0351194603317519,0.0801580871597602,0.1215185706879032,0.1572031671581935,0.1855383974779378,0.2051984637212956,0.2152638534631578,0},
{0.0271524594117541,0.0622535239386479,0.0951585116824928,0.1246289712555339,0.1495959888165767,0.1691565193950025,0.1826034150449236,0.1894506104550685},
};
int nn,i,k;
double u[16],aa[16],s,c1,c2;
k=n;
if(n>8&&n<1)
{
if(flag)
printf("N=%d,N,must be larger than 8 and smaller than 1.",n);
n=0;
return(-1);
}
nn=n+n;
c1=(b+a)/2;
c2=(b-a)/2;
for(i=1;i<=n;i++)
{
u[i-1]=c1-c2*x[n-1][i-1];
u[nn-i]=c1+c2*x[n-1][i-1];
aa[i-1]=f[n-1][i-1];
aa[nn-i]=f[n-1][i-1];
}
s=0;
for(i=1;i<=nn;i++)
s=s+aa[i-1]*(*func)(u[i-1]);
*result=c2*s;
n=k;
return(0);
}

复杂,不想看.哈哈.