24小时热门版块排行榜    

查看: 963  |  回复: 16
当前主题已经存档。

li343

至尊木虫 (职业作家)

[交流] 【求助】哪位英雄帮我看一下这个小程序【已完结】

程序编译正常,有结果(不知道是否正确),但发现v一直为1,无论温度T怎么给,v都不变,这就是个问题了,请高手帮看一下是啥原因。
    先谢谢了!

#include
#include

void main()
{
   int i,j;
   double t,a1,a2,a3,P,Pc,Tc,T,Tr;
   double c0,c1,c2,c3,Mole,a_T,a1_T,v,R,X0,w;
   double m,ac,b,Afa_T;
   double h1,h2,H;

   a1=6.6400537;
   a2=8.3412027;
   a3=27.498677;

   if(-100    {
          c0=3.089329; c1=0.1020401; c2=-2.400100e-4; c3=4.126521e-7;
   }
   if(298<=T<1500)
   {
          c0=-2.207131; c1=0.1002983; c2=-0.5530711e-4; c3=0.1187821e-7;
   }
   
   X0=249.4758;

   Tc=408.16;  //临界温度/K
   Pc=3684e+3;    //临界压力/kPa
   Mole=58.12; //分子量
   w=0.1756;   //偏心因子
   R=8.314;    //气体常数

   T=338.15;  
   Tr=T/Tc;
   t=1-Tr;
   
   m=0.37464+1.54226*w-0.22992*w*w;
   ac=0.45724*pow((R*Tc),2)/Pc;
   b=0.07780*R*Tc/Pc;
   Afa_T=pow((1+m*(1-pow(Tr,0.5))),2);
   a_T=ac*Afa_T;
   a1_T=-m*a_T*pow(Tr,0.5)*pow(Afa_T,-0.5)/T;

   double V[1000];
   V[0]=0.7;
   for(i=0;i<=1000;i++)
   {
           V[i+1]=pow(((R*T-P*b)*pow(V,2)+(2*R*T*b+3*P*b-a_T)*V-(P*pow(b,3)+R*T*pow(b,2)-a_T*b))/P,(1/3));
v=V;
   }
   
   printf("%f\n",m);
   printf("%f\n",ac);
   printf("%f\n",b);
   printf("%f\n",Afa_T);
   printf("%f\n",a_T);
   printf("%f\n",a1_T);

   printf("\n";

   P=Pc*exp((a1+a2*pow(t,1.78)+a3*pow(t,6.06))*log(Tr));  //饱和蒸汽压,Pa

   h1=c0*T+c1*pow(T,2)/2+c2*pow(T,3)/3+c3*pow(T,4)/4;
   h2=(a_T-T*a1_T)*log((v-0.4142*b)/(v+2.4142*b))/(2*sqrt(2)*a1_T*b);
   H=4.1868*h1/Mole+h2+P*v-R*T+X0; //焓值,J/(kg*K)

   printf("%lf\n",P/1000);
   printf("%lf\n",v);
   printf("%lf\n",H/1000);

}

[ Last edited by 余泽成 on 2009-11-26 at 20:25 ]
回复此楼

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sitonyl

铁杆木虫 (文坛精英)


li343(金币+1,VIP+0): 7-30 13:50
v=V;
应该是这个赋值语句有问题,我觉得应该是v=*(V+i);或v=V;这样的。
zz
2楼2009-07-30 10:48:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li343

至尊木虫 (职业作家)

引用回帖:
Originally posted by sitonyl at 2009-7-30 10:48:
v=V;
应该是这个赋值语句有问题,我觉得应该是v=*(V+i);或v=V;这样的。

哪个语句原来就是你写的那样的,不知道咋不显示的!

[ Last edited by li343 on 2009-7-30 at 11:41 ]
3楼2009-07-30 11:32:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

羽寒月

银虫 (小有名气)


li343(金币+1,VIP+0): 7-30 13:50
为什么我编译就通不过捏~~
test.c: In function `main':
test.c:48: error: incompatible type for argument 1 of `pow'
test.c:48: error: invalid operands to binary *
test.c:49: error: incompatible types in assignment
test.c:5: warning: return type of 'main' is not `int'
4楼2009-07-30 12:35:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

羽寒月

银虫 (小有名气)

★ ★ ★ ★ ★ ★ ★
li343(金币+2,VIP+0): 7-30 13:30
li343(金币+5,VIP+0): 7-30 13:50
找到两个错误:
1、 变量P没有赋值
2、1/3要改成1.0/3.0,整型运算1/3=0,所以你的v一直是1.0
5楼2009-07-30 12:45:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ms98

★ ★
li343(金币+1,VIP+0): 7-30 13:50
rjjy(金币+1,VIP+0):呵呵! 7-30 17:15
if(-100 我看到这儿就不想往下看了。
话说来提问题是好事,但是提问之前不动手调试就不太好了。
另外,编译器不报错只表明程序中没有编译器能找到的错,主要还是靠人来看。

[ Last edited by ms98 on 2009-7-30 at 13:03 ]
6楼2009-07-30 13:02:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

richsuper

银虫 (小有名气)


wangen994(金币+1,VIP+0):谢谢参与讨论 7-30 21:54
同志啊,多写代码,多多调试,看这是if(-100
7楼2009-07-30 21:14:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjpm

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
强贴留名!
引用回帖:
Originally posted by richsuper at 2009-7-30 21:14:
同志啊,多写代码,多多调试,看这是if(-100

8楼2009-07-30 22:31:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shipsw

木虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+2,VIP+0):感谢你参与讨论 8-10 08:26
循环体 for 内部出了个赋值语句 v=V意外。其他的没有调用变量v。所以这个语句应该移到循环体外部。
而且v 与V 是不同类型的。所以也不对。
选择了这条路也就放弃了其他的路了。
9楼2009-08-07 09:59:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)


小木虫(金币+0.5):给个红包,谢谢回帖交流
搂住的代码很强大
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
10楼2009-08-09 21:10:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 li343 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见