一、 C语言的起源
C 语言是1972年由美国的Dennis Ritchie设计发明的, 并首次在UNIX操作系统 的 DEC PDP-11 计算机上使用。 它由早期的编程语言 BCPL( Basic Combind Programming Language) 发展演变而来。在1970年, AT&T 贝尔实验室的 Ken Thompson根据BCPL语言设计出较先进的并取名为 B的语言, 最后导了C 语言的问世。 随着微型计算机的日益普及, 出现了许多C 语言版本。由于没有统一的标准, 使得这些C 语言之间出现了一些不一致的地方。为了改变这种情况, 美国国家标准 研究所(ANSI)为C 语言制定了一套ANSI标准, 成为现行的C语言标准[1]。
二、C 语言的特点
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了, 象PC- DOS 、WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
1. C是中级语言
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
2. C是结构式语言
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。
3. C语言功能齐全
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。
4. C语言适用范围大
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于 多种机型[1]。
三、 Turbo C 2.0集成编程环境
Turbo C 2.0最好安装在硬盘特定的目录下,如“D:\ TC(下依次为例),可再以章为单位建立下级目录,如D1、D2。DOS下键入TC↙(回车)第一次运行,显示主屏暮如图1-1所示。
进入 Turbo C 2.0集成编程界面。(注:第一次进入Turbo C 2.0集成编程界面时,需要对Turbo C 2.0集成编程界面进行必要的设置。按下F10键激活菜单,进入Options子菜单,有7项。第4项Directories中。修改3处:“Include directories::D:\ TC \ TC20 \ INCLUDE”,“Library directories:D:\ TC \ TC20 \ LIB”,“Turbo C directory:D:\ TC \ TC20 ”。按ESC键退回。选择“Save options”,在“Config File”窗口中选择“D:\ TC \ TC20 \ TCCONFIG.TC “,覆盖存盘。最后还提醒一点:FILES中的Change dir(改变当前目录)中应设置为当前程序所在目录。)
四、利用Turbo C 2.0编程软件编写孔板流量计孔径的计算程序
求:20℃情况下孔板节流孔直径d20
已知条件:
质量流量Qmax,Qcom,Qmin(kg/h);操作密度M (kg/m3); 动力黏度N (mPa?s); 20℃情况下工艺管道内径D20(m); 正常操作压力P MPa(G);正常操作温度T (℃);管道材质的线膨胀系数rD; 孔板材质的线膨胀系数rd ;
通过计算后所得的数据:
正常操作温度T情况下工艺管道内径D(m);雷诺数ReD;计算差压上限值CPcom 和CPmax;
计算A2[2] ;计算
孔板流量计的流出系数C[2]
在知道了相应的工艺条件后,下面我就利用Turbo C 2.0编程软件编写孔板流量计孔径的计算程序。首先,在开始前,我还要先介绍一下Turbo C 2.0相关的几个基本函数,然后通过应用这些函数来编写孔板流量计孔径的计算程序。
1 数学函数 包含在如表1-1所示:(注:使用时在源文件前加命令行:
# include)
2 由上面的已知条件和Turbo C 2.0的数学函数,通过Turbo C 2.0编程软件编写孔板流量计孔径的计算程序如下:
#include
main()
{ int n;
const float pai=3.141592653289;
const float b0=0.500000;
const float C0=0.606000;
float Qmax,Qcom,Qmin,M,N,D20,rD,rd,T=0.0,b,D,ReD,CPmax,CPcom,A2,
L,C,C1,b1,b2,d,d20;
printf("Qmax,Qcom,Qmin,M,N,D20,rD,rd,T=\n");
scanf("%f%f%f%f%e%f%e%e%f",&Qmax,&Qcom,&Qmin,&M,&N,&D20,&rD,&rd,&T);
/*输入已知的工艺参数*/
D=D20*(1+rD*(T-20));
ReD=4*Qcom/(3600*pai*N*D);
CPcom=pow(4*Qcom*sqrt(1-pow(b0,4))/(3600*pai*b0*b0*D*D*C0),2)*1/(2*M);
CPmax=CPcom*pow((Qmax/Qcom),2);
A2=4*Qcom/(3600*pai*D*D*sqrt(2*25e3*M));
printf("CPcom=%6.10f\n",CPcom);
printf("CPmax=%6.10f\n",CPmax);
if(ReD>2e5) /*利用Turbo C的if判断语句对雷诺数进行判断计算*/
{b=pow(1+pow((0.60/A2),2),-0.25);}
if(ReD<2e5)
{b=pow(1+pow((0.60/A2+0.06),2),-0.25);}
L=0.0254/D;
C=0.5961+
0.0261*pow(b,2)-
0.216*pow(b,8)+
0.000521*pow(((pow(10,6)*b)/ReD),0.7)+
((0.0188+0.0063*pow((19000*b/ReD),0.8)))*pow(b,3.5)*pow((pow(10,6)/ReD),0.3)+
(0.043+0.080*exp(-10*L)-0.123*exp(-7*L))*(1-0.11*pow((19000*b/ReD),0.8))*
(pow(b,4)/(1-pow(b,4)))-
0.031*(2*L/(1-b)-0.8*pow(2*L/(1-b),1.1))*pow(b,1.3);
b1=pow(1+pow((C/A2),2),-0.25);
C1=0.5961+
0.0261*pow(b1,2)-
0.216*pow(b1,8)+
0.000521*pow(((pow(10,6)*b1)/ReD),0.7)+
((0.0188+0.0063*pow((19000*b1/ReD),0.8)))*pow(b1,3.5)*pow((pow(10,6)/ReD),0.3)+
(0.043+0.080*exp(-10*L)-0.123*exp(-7*L))*(1-0.11*pow((19000*b1/ReD),0.8))*
(pow(b1,4)/(1-pow(b1,4)))-
0.031*(2*L/(1-b1)-0.8*pow(2*L/(1-b1),1.1))*pow(b1,1.3);
b2=pow(1+pow((C1/A2),2),-0.25);
for(n=2;fabs(b2-b1)>1.0e-10;n++) /*利用Turbo C的for循环语句进行迭代计算*/
{
b=b1;
C=0.5961+
0.0261*pow(b,2)-
0.216*pow(b,8)+
0.000521*pow(((pow(10,6)*b)/ReD),0.7)+
((0.0188+0.0063*pow((19000*b/ReD),0.8)))*pow(b,3.5)*pow((pow(10,6)/ReD),0.3)+
(0.043+0.080*exp(-10*L)-0.123*exp(-7*L))*(1-0.11*pow((19000*b/ReD),0.8))*
(pow(b,4)/(1-pow(b,4)))-
0.031*(2*L/(1-b)-0.8*pow(2*L/(1-b),1.1))*pow(b,1.3);
b1=pow(1+pow((C/A2),2),-0.25);
C1=0.5961+
0.0261*pow(b1,2)-
0.216*pow(b1,8)+
0.000521*pow(((pow(10,6)*b1)/ReD),0.7)+
((0.0188+0.0063*pow((19000*b1/ReD),0.8)))*pow(b1,3.5)*pow((pow(10,6)/ReD),0.3)+
(0.043+0.080*exp(-10*L)-0.123*exp(-7*L))*(1-0.11*pow((19000*b1/ReD),0.8))*
(pow(b1,4)/(1-pow(b1,4)))-
0.031*(2*L/(1-b1)-0.8*pow(2*L/(1-b1),1.1))*pow(b1,1.3);
b2=pow(1+pow((C1/A2),2),-0.25);
}
printf("C1=%6.10f\n",C1); /*输出计算孔板流量计的流出系数C1*/
printf("b2=%6.10f\n\n",b2); /*输出计算孔板流量计的直径比b2*/
d=D*b2;
d20=d/(1+rd*(T-20));
printf("d20=%6.10f\n\n",d20);
/*输出计算孔板流量计在20℃情况下孔板节流孔直径d20*/
}
以上就是计算孔板流量计孔径的计算程序。通过此程序可以很快的计算出孔板流量计在20℃情况下孔板节流孔孔径的大小。
五 应 用
实例一:
① 被测流体 :水;
② 流体流量:最大流量Qmax=500t/h;正常流量Qcom=400t/h;最小流量Qmin=200t/h
③ 正常操作压力:P=14.6 MPa(G);
④ 正常操作温度:T=220 ℃;
⑤ 20℃情况下工艺管道内径:D20=233㎜;
⑥ 管道材质的线膨胀系数:rD=11.16e-6㎜/㎜?℃;
⑦ 孔板材质的线膨胀系数:rd=16.60e-6 ㎜/㎜?℃;
⑧ 操作密度:M=850.9082 (kg/m3);
⑨ 动力黏度:N=0.124 (mPa?s) ;
按下Ctrl+F9运行计算程序:(注意单位换算)
要求输入已知的工艺参数:Qmax, Qcom, Qmin, M, N, D20, rD, rd, T =
500000 400000 200000 850.9082 124e-6 .233 11.16e-6 16.60e-6 233↙(回车)
经过程序的运算得到如下的结果:(按下Alt+F5查看结果)
CPcom=166259.4432591512
CPmax=257980.3725675625
C1=0.6023605334
b2=0.5024122240
d20=0.116966338
实例二:
① 测流体 :汽油;
② 流体流量:最大流量Qmax=40000 kg/h;正常流量Qcom=31250 kg/h;
最小流量Qmin=20000 kg/h
③ 正常操作压力:P=0.80 MPa(G);
④ 正常操作温度:T=40 ℃;
⑤ 20℃情况下工艺管道内径:D20=102㎜;
⑥ 管道材质的线膨胀系数:rD=11.16e-6㎜/㎜?℃;
⑦ 孔板材质的线膨胀系数:rd=16.60e-6 ㎜/㎜?℃;
⑧ 操作密度:M=720 (kg/m3);
⑨ 动力黏度:N=0.3000 (mPa?s) ;
按下Ctrl+F9运行计算程序:(注意单位换算)
要求输入已知的工艺参数:Qmax, Qcom, Qmin, M, N, D20, rD, rd, T =
40000 31250 20000 720 300e-6 .102 11.16e-6 16.60e-6 40↙(回车)
经过程序的运算得到如下的结果:(按下Alt+F5查看结果)
CPcom=31982.3496093750
CPmax=52399.8828125000
C1=0.6041094065
b2=0.5007327199
d20=0.051069240
实例三:
① 测流体 :碱液;
② 流体流量:最大流量Qmax=6000 kg/h;正常流量Qcom=5000 kg/h;
最小流量Qmin=3000 kg/h
③ 正常操作压力:P=0.65 MPa(G);
④ 正常操作温度:T=40 ℃;
⑤ 20℃情况下工艺管道内径:D20=52㎜;
⑥ 管道材质的线膨胀系数:rD=11.16e-6㎜/㎜?℃;
⑦ 孔板材质的线膨胀系数:rd=16.60e-6 ㎜/㎜?℃;
⑧ 操作密度:M=1112 (kg/m3);
⑨ 动力黏度:N=2.0000 (mPa?s) ;
按下Ctrl+F9运行计算程序:(注意单位换算)
要求输入已知的工艺参数:Qmax, Qcom, Qmin, M, N, D20, rD, rd, T =
6000 5000 23000 1112 2000e-6 .052 11.16e-6 16.60e-6 40↙(回车)
经过程序的运算得到如下的结果:(按下Alt+F5查看结果)
CPcom=7848.1137695312
CPmax=11301.2841796875
C1=0.6153961420
b2=0.5284164548
d20=0.027457322
六:结束语
通过上述实例对
孔板流量计孔径的计算程序进一步的做了验证,可以得到如下结论:一,利用此程序可以精确的计算出不同介质、不同温度、不同流量等条件下的孔板流量计孔径的大小;二:利用此程序计算孔板流量计孔径的特点是快速,简单、计算量小;三:利用此程序为今后的设计提供了一套有序的计算方法。
参 考 文 献
[1] 郭继展.新编C语言程序设计[M].北京:机械工业出版社,2004. 2-3.
[2] 孙淮清,王建中,流量测量节流装置设计手册[M].化学工业出版社,2006. 13.