double t[9]={15,30,50,100,150,200,300,400,550};
double cp[9]={7.2,16.4,21.1,24.3,25.2,25.8,26.5,27.4,28.9};
double sm_15=2.4;
double lgrg2(int n,double x0)
{
int i;
double p,q,r,z,c[i];
for(i=1;i<n;i++)
c[i]=cp[i]/t[i];
if(x0>t[0] && x0<t[1])
{
i=0;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
}
else if(x0>t[n-2] && x0<t[n-1])
{
i=6;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
}
else
{
for(i=0;i<n;i++)
{
if(x0>t[i] && x0<t[i+1])
if (fabs(x0-t[i])> fabs(x0-t[i+1]))
{
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
break;
}
else
{
i=i-1;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
break;
}
}
}
return z;
}
double simp()
{
int k,n=1;
double a=15,b=500,h,fa,fb,eps=0.00001;
double t1,t2,s,s1,s2,d=1;
h=b-a;
s1=0;
fa=cp[0]/t[0];
fb=lgrg2(9,500);
t1=h*(fa+fb)/2;
while(d>eps)
{
s=0;
for(k=1;n;k++)
{
s=s+lgrg2(9,a+(k-0.5)*h);
}
t2=(t1+h*s)/2;
s2=t2+(t2-t1)/3;
d=fabs(s2-s1);
if(fabs(s2)>1)
{
d=fabs(s2-s1)/s2;
}
n=n*2;
h=h/2;
t1=t2;
s1=s2;
}
return s2;
}
int main()
{
double sm_500;
sm_500=sm_15+simp();
printf("固态铅在500K时的标准熵是%lf",sm_500);
return 0;
}
#include<stdio.h>
#include<algorithm>
double t[9] = { 15,30,50,100,150,200,300,400,550 };
double cp[9] = { 7.2,16.4,21.1,24.3,25.2,25.8,26.5,27.4,28.9 };
double sm_15 = 2.4;
double lgrg2(int n, double x0)
{
int i;
double p, q, r, z, c[1024]; //c[i]只有在i是常量时才能编译通过
for (i = 0; i < n; i++) //i初始为1 ???
c[i] = cp[i] / t[i];
if (x0 > t[0] && x0 < t[1])
{
i = 0;
p = (x0 - t[i + 1])*(x0 - t[i + 2]) / (t[i] - t[i + 1]) / (t[i] - t[i + 2]);
q = (x0 - t[i])*(x0 - t[i + 2]) / (t[i + 1] - t[i]) / (t[i + 1] - t[i + 2]);
r = (x0 - t[i])*(x0 - t[i + 1]) / (t[i + 2] - t[i]) / (t[i + 2] - t[i + 1]);
z = p * c[i] + q * c[i + 1] + r * c[i + 2];
}
else if (x0 > t[n - 2] && x0 < t[n - 1])
{
i = 6;
p = (x0 - t[i + 1])*(x0 - t[i + 2]) / (t[i] - t[i + 1]) / (t[i] - t[i + 2]);
q = (x0 - t[i])*(x0 - t[i + 2]) / (t[i + 1] - t[i]) / (t[i + 1] - t[i + 2]);
r = (x0 - t[i])*(x0 - t[i + 1]) / (t[i + 2] - t[i]) / (t[i + 2] - t[i + 1]);
z = p * c[i] + q * c[i + 1] + r * c[i + 2];
}
else
{
for (i = 0; i < n; i++)
{
if (x0 > t[i] && x0 < t[i + 1])
if (fabs(x0 - t[i]) > fabs(x0 - t[i + 1]))
{
p = (x0 - t[i + 1])*(x0 - t[i + 2]) / (t[i] - t[i + 1]) / (t[i] - t[i + 2]);
q = (x0 - t[i])*(x0 - t[i + 2]) / (t[i + 1] - t[i]) / (t[i + 1] - t[i + 2]);
r = (x0 - t[i])*(x0 - t[i + 1]) / (t[i + 2] - t[i]) / (t[i + 2] - t[i + 1]);
z = p * c[i] + q * c[i + 1] + r * c[i + 2];
break;
}
else
{
i = i - 1;
p = (x0 - t[i + 1])*(x0 - t[i + 2]) / (t[i] - t[i + 1]) / (t[i] - t[i + 2]);
q = (x0 - t[i])*(x0 - t[i + 2]) / (t[i + 1] - t[i]) / (t[i + 1] - t[i + 2]);
r = (x0 - t[i])*(x0 - t[i + 1]) / (t[i + 2] - t[i]) / (t[i + 2] - t[i + 1]);
z = p * c[i] + q * c[i + 1] + r * c[i + 2];
break;
}
}
}
return z;
}
double simp()
{
int k, n = 1;
double a = 15, b = 500, h, fa, fb, eps = 0.00001;
double t1, t2, s, s1, s2, d = 1;
h = b - a;
s1 = 0;
fa = cp[0] / t[0];
fb = lgrg2(9, 500);
t1 = h * (fa + fb) / 2;
while (d > eps)
{
s = 0;
for (k = 1; k < n; k++) //这里死循环了
{
s = s + lgrg2(9, a + (k - 0.5)*h);
}
t2 = (t1 + h * s) / 2;
s2 = t2 + (t2 - t1) / 3;
d = fabs(s2 - s1);
if (fabs(s2) > 1)
{
d = fabs(s2 - s1) / s2;
}
n = n * 2;
h = h / 2;
t1 = t2;
s1 = s2;
}
return s2;
}
int main()
{
double sm_500;
sm_500 = sm_15 + simp();
printf("固态铅在500K时的标准熵是%lf", sm_500);
getchar();
return 0;
}