c语言中1. ind00,关于c++中计算结果出现-1.#IND的问题 - 程序语言 - 小木虫 - 学术 科研 互动社区...

流体力学中用c++编程计算串联管路的流量q,完整的程序如下,但是计算结果出现-1.#IND,不知道什么情况,请大神们帮看看吧,应该怎么写才对?

#include

#include

#define pi 3.1415926

#define g 9.8

float CL(float dlt,float d,float re,int *id)

{

float lmd1,temp,lmd,Rec1,Rec2,Rec3;

Rec1=2320;

Rec2=80*d/dlt;

Rec3=4160*pow(d/2.0/dlt,0.85);

if(re

else if(re

{

if(re<1e5){lmd=0.3164/pow(re,0.25);*id=2;}

else if(re<3e6){lmd=0.0032+0.221*pow(re,-0.237);*id=3;}

}

else if(re

{

lmd=0.01;*id=4;

while(fabs(lmd-lmd1)>=1e-6)

{

lmd1=lmd;

temp=log(dlt/(3.7*d)+2.51/re/sqrt(lmd1))/log(10.0);

lmd=pow(1.0/(-2.0)/temp,2);

}

}

else if(re>=Rec3)

{

lmd=pow((1.74+2.0*log(d/(2.0*dlt))/log(10.0)),-2);

*id=2;

}

return(lmd);

}

float CL(float,float,float,int *);

void main()

{

int ID1=0;

int ID2=0;

float DLT1,LMD1,LMD11,Re1,D1,L1,V1;

float DLT2,LMD2,LMD22,Re2,D2,L2,V2;

float Q,NU,H,KCE;

float DK,lll;

printf("please input:h,l1,d1,l2,d2,nu,dlt1,dlt2,kce:\n");

scanf("%f%f%f%f%f%f%f%f%f",&H,&L1,&D1,&L2,&D2,&NU,&DLT1,&DLT2,&KCE);

LMD11=0.025;LMD22=0.015;

loop:

DK=D1*D1/(D2*D2);

lll=KCE+LMD11*L1/D1+(1-DK)*(1-DK);

lll=lll+LMD22*L2/D2*DK*DK+DK*DK;

V1=sqrt(2*g*H/lll);

V2=DK*V1;

Re1=V1*D1/NU;

Re2=V2*D2/NU;

LMD1=CL(DLT1,D1,Re1,&ID1);

LMD2=CL(DLT2,D2,Re2,&ID2);

if((fabs(LMD1-LMD11)>=5e-6)||(fabs(LMD2-LMD22)>=5e-6))

{

LMD11=LMD1;

LMD22=LMD2;

goto loop;

}

Q=pi*D1*D1*V1/4;

printf("ID=%d\nv1=%7.4fm/s\nre1=%7.2f\nlmd1=%7.4f\nID2=%d\nv2=%7.4fm/s\nre2=%7.2f\nlmd2=%7.4f\nq=%7.4fm3/s\n",ID1,V1,Re1,LMD1,ID2,V2,Re2,LMD2,Q);

}

运行程序:

input:H,D1,D2,DLT1,DLT2,L1,L2,NU

6.,0.6,0.9,0.0015,0.0003,300.,240.,1.E-6

正确的输出如下:

ID1=5

V1=2.8713m/s

RE1=1722771.00

LMD1=0.0249

ID2=4

V2=1.2761m/s

RE2=1148514.00

LMD2=0.0159

Q=0.8118m3/s

[Last edited by yuan020545 on 2011-5-15 at 22:35]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值