首先,我正在做一个程序,有点简单的长程序,这里是完整的细节:
真实气体的P-v-T关系可以采用多种形式。最简单的 关系是理想的气体方程和范德瓦尔斯方程。 这些关系适用于过热蒸汽。文件 “pvt.txt”包含过热蒸汽的P-v-T数据(10 - 800 kPa) 温度范围为200 oC至1200 oC,由此获得 蒸汽表。
编写C程序以读取蒸汽表数据“pvt.txt”。在C中 程序,估算压力范围10的蒸汽密度 至800 kPa,温度范围200 oC至1200 oC,
(1)使用理想气体关系: m3 / kg,其中R = 0.4615 kJ / kgK,T是温度[K],P是压力[kPa]。
(2)使用范德瓦尔斯方程:
其中R = 0.4615kJ / kgK,T是温度[K],P是压力 [千帕。常数来自 其中Pcr = 22060kPa,Tcr = 647.1K。
在每种情况下,计算得到的百分比误差 估计密度如下:错误= x 100%提交报告 必须包括: 1.介绍,算法或流程图,C程序,以及蒸汽表的密度。 2.使用理想气体方程时的估算密度表。 3.使用理想气体方程时的百分比误差表。 4.使用范德华方程时的估计密度表。 5.使用范德华方程时的百分比误差表。 6.讨论和结论。注意:密度是特定体积的倒数,
pvt.txt:
pvt txt
程序的第一步已经完成了,但我遇到第二步问题(使用范德瓦尔斯方程)这里是我写的
#include <stdio.h>
#include <math.h>
main(){
FILE *f1;
FILE *f2;
f1 = fopen("pvt.txt","r");
f2 = fopen("second.txt","w");
int i,j;
float v[9][6],vdr[9][6],edr[9][6]; //V
float p[9]={10,50,100,200,300,400,500,600,800}; //Pressure
float T[6]={200,400,600,800,1000,1200}; //Temperature
float a,b,Pcr=22060,Tcr=647.1,R=0.4615,v0,diff;
a=(27*pow(R,2)*pow(Tcr,2))/(64*Pcr);
b=(R*Tcr)/(8*Pcr);
// //
/*Read input file for v from steam table*/
for(i=0;i<=8;i=i+1)
fscanf(f1,"%f %f %f %f %f %f",&v[i][0],&v[i][1],
&v[i][2],&v[i][3],&v[i][4],&v[i][5]);
/*Write v steam table to output file*/
fprintf(f2, "The V Steam Values = \n");
for(i=0;i<=8;i=i+1)
fprintf(f2,"%f %f %f %f %f %f \n",v[i][0],v[i][1],
v[i][2],v[i][3],v[i][4],v[i][5]);
// //
while(diff>0.001)
{
for(i=0;i<=8;i=i+1)
for(j=0;j<=5;++j)
v0=v;
v=b+ 0.4615*(T+273.15)/(p+a/(v0*v0));
diff=fabs(v-v0)/v0;
}
/*Write v using VDR to output file*/
fprintf(f2, "The V using VDR Values = \n");
for(i=0;i<=8;i=i+1)
fprintf(f2,"%f %f %f %f %f %f \n",v[i][0],v[i][1],
v[i][2],v[i][3],v[i][4],v[i][5]);
}
从“float(*)[6]'类型中分配类型'float'时,每次都说错误不兼容类型在这些方面:
while(diff>0.001)
{
for(i=0;i<=8;i=i+1)
for(j=0;j<=5;++j)
v0=v;
v=b+ 0.4615*(T+273.15)/(p+a/(v0*v0));
diff=fabs(v-v0)/v0;
}
我该怎么做才能解决它?
此处还提供了一个程序提示:
/*Solving van der waals equation using trial-and-error
p : kPa, t : Celcius, v : m^3/kg */
#include <stdio.h>
main()
{
float a,b,diff,v,vo,p,t;
a=27*0.4615*0.4615*647.1*647.1/(64*22060.0);
b=0.4615*647.1/(8*22060.0);
/*some test values*/
p=10;
t=200;
/*guess a value for v, Let vo=v and calculate a new
v. If relative difference (diff) is greater than
some tolerance, start new calculations */
diff=100;
v=10.0;
while(diff>0.001)
{vo=v;
v= b+ 0.4615*(t+273.15)/(p+a/(vo*vo));
diff=fabs(v-vo)/vo;
}
printf("%f\n",v);
system("pause");
}