誰能幫我調一下這個C程式

2022-06-12 16:36:45 字數 3201 閱讀 2496

1樓:不是很無知

[email protected]

2樓:高金山

#include

#include

double dn0=0.6968,dn1,dw0=0.711,dw1,tr=60,tz,tn=29,g,p0=894,l1=30000,l2=200,l3=52800,kd=2.

2,kk;/***這六個引數分別代表原管道內徑,新管道內徑,原管道外徑,新管道外徑,出站溫度,**凝點,質量流量,

20度時**密度,三段各自的長度,埋地時的傳熱係數,架空時的傳熱係數***/

double c=0.197,re,dr=0.02361,n=0.

6,hd=1.0,afaac,afaar,tj,tzpj=-10,tpj,tbi,tqi=-10,vqi=3,ndqi=0.00001243;/***求kk用到的各個引數***/

double xs[4],dd[3],hg[3];/***擬合出的方程的四個係數,迭代返回的三個結果,求hg返回的三個結果***/

double nw[4]; /***擬合出的粘溫關係曲線方程係數***/

int i,n1,n2; /***n1,n2用來控制傳遞給擬合函式時的資料個數***/

double t0=18,tq=25,l=83000,z=18,a=529,b=0.005116,h,hm=20,qg,gs=628,qs,q0; /***地溫,三段總長度,高程差,泵特性曲線方程的兩個係數,總沿程摩阻,站內摩阻,工作點流量,

設計質量流量,設計體積流量,擬合出的管道工作特性曲線(按規律肯定有兩個極值)的極小值***/

double a,b,c,d, disc, g0,g1,g2,h1,h2,q1,q2; /***g0是和qo對應的質量流量,g1,g2是管道工作特性曲線兩個極值,h1,h2是與之對應

的兩個沿程摩阻,q1,q2是和g1,g2對應的體積流量***/

double nd[100]=;

double wd[100]=;

double h[100]=;

double g[100]=; /***nd,wd,h,g均是擬合方程時要傳遞的資料***/

void scnh(int n,double x,double y);

double tt(double tr1,double l,double d1,double k1,double t0);

void diedai(double k2,double din,double dout,double tr2,double tz2);

void hgg();

main()

scnh(n1,wd,nd); /***擬合粘溫關係曲線***/

/* for(i=0;i<4;i++)

nw[i]=xs[i];

printf("n=(%lf)*t^3+(%lf)*t^2+(%lf)*t+(%lf)\n",nw[3],nw[2],nw[1],nw[0]); /*nw曲線*/

nw[3]=0.0163; nw[2]=-1.8907; nw[1]=64.566; nw[0]=-466.92;

while(1)//for(;;)

scnh(n2,g,h); /***擬合hg關係曲線***/

a=xs[3]; b=xs[2]; c=xs[1]; d=xs[0]; /***求hg曲線的極小值確定臨界流量***/

printf("h=(%lf)*g^3+(%lf)*g^2+(%lf)*g+(%lf)\n",a,b,c,d); /*hg曲線*/

disc=4*b*b-12*a*c;

g1=(-2*b+sqrt(disc))/(6*a);

g2=(-2*b-sqrt(disc))/(6*a);

h1=a*g1*g1*g1+b*g1*g1+c*g1+d;

h2=a*g2*g2*g2+b*g2*g2+c*g2+d;

if(h1=h2)

q0=g0/p0;

printf("臨界體積流量q0=%lf\n",q0); /*極值體積流量*/

qs=gs/p0;

qg=qs;

while(fabs(q2-q1)>=0.0001) /***求新的工作點流量***/

printf("工作點體積流量qg=%lf\n",qg); /*工作點體積流量*/

if (qg=q0)}}

}/***最小二乘法三次擬合程式***/

void scnh(int n,double x,double y)

dd[0]=i;dd[1]=q;dd[2]=tl; /***dd[0]存放水力坡降,dd[1]存放體積流量,dd[2]存放終點溫度***/

}/***求對應的h,g,分三段分別迭代,每段迭代時都用不同的起點和終點溫度,起點溫度是精確的,終點溫度先求一個無摩擦的溫度然後迭代求出

有摩擦熱的溫度***/

void hgg()

printf("架空管道傳熱係數kk=%lf\n",kk);

h2=dd[0]*l2;

tr=dd[2];

tz=tt(tr,l3,dn0,kd,t0);

diedai(kd,dn0,dw0,tr,tz);

h3=dd[0]*l3;

hg[0]=h1+h2+h3+z+hm; /*** hg[0]存放總的沿程摩阻,包括三段的沿程摩阻,高程差和一個站內摩阻***/

hg[1]=g; /***hg[1]存放質量流量***/

hg[2]=dd[2]; /***hg[2]存放最後一段的終點溫度***/

}以上程式,我只對格式整理一下,沒有實質的改動。

輸入:32,42(注意,輸入的兩個數之間有個逗號)

輸出很多資料,不會有死迴圈出現的啊

補充:我覺得,不在於那個0.0001的值太大,而在於演算法有問題

到底演算法的**有問題,我不知道了!

為什麼要迴圈呼叫hgg呢?然後又呼叫它?

3樓:前進

#include

#include

int main()

system("pause");

return 0;

} void fun(int x, int y)else printf("%c", digit[x]);}

4樓:柏一禾

高金山 - 副總裁 十級

hgg 是求和g(g遞增至設計輸量)對應的h,後面要擬合h-g曲線!

C 程式,大家幫我看一下,這個程式有錯,我不知道要怎麼修改,哪個高手幫我改一下,謝謝了

include using namespace std class shape virtual double area 0 virtual void print 0 class trapezia public shape trapezia trapezia double t,double b,dou...

幫忙看一下這個程式c語言

y 2 x根本不會改變x的值,想變的話應該是x 2 等號右邊的值是不會變的 printf d n y 列印y變數的值,2printf d x 2 列印表示式 x 2 的值,3 int i 1 現在i變數的值是 1i 這句執行完後 i 變數的值為 2printf d n i 列印i 的值,2print...

剛接觸VB,誰能幫我看一下這段程式

問題一 function fila x as double x x 30 end function 函式返回為空值,變數x加30 要讓變數x不變,函式返回值為x 30,方法如下 function fila x as double fila x 30 end function 問題二 a1未賦初始值,...