实验5
- 格式:docx
- 大小:129.43 KB
- 文档页数:7
实验5:二叉树的建立及遍历(第十三周星期三7、8节)一、实验目的1.学会实现二叉树结点结构和对二叉树的基本操作。
2.掌握对二叉树每种操作的具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。
二、实验要求1.认真阅读和掌握和本实验相关的教材内容。
2.编写完整程序完成下面的实验内容并上机运行。
3.整理并上交实验报告。
三、实验内容1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度。
2 .编写程序生成下面所示的二叉树,并采用中序遍历的非递归算法对此二叉树进行遍历。
四、思考与提高1.如何计算二叉链表存储的二叉树中度数为1的结点数?2.已知有—棵以二叉链表存储的二叉树,root指向根结点,p指向二叉树中任一结点,如何求从根结点到p所指结点之间的路径?/*----------------------------------------* 05-1_递归遍历二叉树.cpp -- 递归遍历二叉树的相关操作* 对递归遍历二叉树的每个基本操作都用单独的函数来实现* 水上飘2009年写----------------------------------------*/// ds05.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>typedef char ElemType;using namespace std;typedef struct BiTNode {ElemType data;//左右孩子指针BiTNode *lchild, *rchild;}BiTNode, *BiTree;//动态输入字符按先序创建二叉树void CreateBiTree(BiTree &T) {char ch;ch = cin.get();if(ch == ' ') {T = NULL;}else {if(ch == '\n') {cout << "输入未结束前不要输入回车,""要结束分支请输入空格!" << endl;}else {//生成根结点T = (BiTNode * )malloc(sizeof(BiTNode));if(!T)cout << "内存分配失败!" << endl;T->data = ch;//构造左子树CreateBiTree(T->lchild);//构造右子树CreateBiTree(T->rchild);}}}//输出e的值ElemType PrintElement(ElemType e) { cout << e << " ";return e;}//先序遍历void PreOrderTraverse(BiTree T) { if (T != NULL) {//打印结点的值PrintElement(T->data);//遍历左孩子PreOrderTraverse(T->lchild);//遍历右孩子PreOrderTraverse(T->rchild);}}//中序遍历void InOrderTraverse(BiTree T) {if (T != NULL) {//遍历左孩子InOrderTraverse(T->lchild);//打印结点的值PrintElement(T->data);//遍历右孩子InOrderTraverse(T->rchild);}}//后序遍历void PostOrderTraverse(BiTree T) { if (T != NULL) {//遍历左孩子PostOrderTraverse(T->lchild);//遍历右孩子PostOrderTraverse(T->rchild);//打印结点的值PrintElement(T->data);}}//按任一种遍历次序输出二叉树中的所有结点void TraverseBiTree(BiTree T, int mark) {if(mark == 1) {//先序遍历PreOrderTraverse(T);cout << endl;}else if(mark == 2) {//中序遍历InOrderTraverse(T);cout << endl;}else if(mark == 3) {//后序遍历PostOrderTraverse(T);cout << endl;}else cout << "选择遍历结束!" << endl;}//输入值并执行选择遍历函数void ChoiceMark(BiTree T) {int mark = 1;cout << "请输入,先序遍历为1,中序为2,后序为3,跳过此操作为0:";cin >> mark;if(mark > 0 && mark < 4) {TraverseBiTree(T, mark);ChoiceMark(T);}else cout << "此操作已跳过!" << endl;}//求二叉树的深度int BiTreeDepth(BiTNode *T) {if (T == NULL) {//对于空树,返回0并结束递归return 0;}else {//计算左子树的深度int dep1 = BiTreeDepth(T->lchild);//计算右子树的深度int dep2 = BiTreeDepth(T->rchild);//返回树的深度if(dep1 > dep2)return dep1 + 1;elsereturn dep2 + 1;}}int _tmain(int argc, _TCHAR* argv[]){BiTNode *bt;bt = NULL; //将树根指针置空cout << "输入规则:" << endl<< "要生成新结点,输入一个字符,""不要生成新结点的左孩子,输入一个空格,""左右孩子都不要,输入两个空格,""要结束,输入多个空格(越多越好),再回车!"<< endl << "按先序输入:";CreateBiTree(bt);cout << "树的深度为:" << BiTreeDepth(bt) << endl;ChoiceMark(bt);return 0;}/*----------------------------------------* 05-2_构造二叉树.cpp -- 构造二叉树的相关操作* 对构造二叉树的每个基本操作都用单独的函数来实现* 水上飘2009年写----------------------------------------*/// ds05-2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#define STACK_INIT_SIZE 100 //栈的存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量typedef char ElemType; //元素类型using namespace std;typedef struct BiTNode {ElemType data; //结点值BiTNode *lchild, *rchild; //左右孩子指针}BiTNode, *BiTree;typedef struct {BiTree *base; //在栈构造之前和销毁之后,base的值为空BiTree *top; //栈顶指针int stacksize; //当前已分配的存储空间,以元素为单位}SqStack;//构造一个空栈void InitStack(SqStack &s) {s.base = (BiTree *)malloc(STACK_INIT_SIZE * sizeof(BiTree));if(!s.base)cout << "存储分配失败!" << endl;s.top = s.base;s.stacksize = STACK_INIT_SIZE;}//插入元素e为新的栈顶元素void Push(SqStack &s, BiTree e) {//栈满,追加存储空间if ((s.top - s.base) >= s.stacksize) {s.base = (BiTree *)malloc((STACK_INIT_SIZE+STACKINCREMENT) * sizeof(BiTree));if(!s.base)cout << "存储分配失败!" << endl;s.top = s.base + s.stacksize;s.stacksize += STACK_INIT_SIZE;}*s.top++ = e;}//若栈不空,则删除s的栈顶元素,并返回其值BiTree Pop(SqStack &s) {if(s.top == s.base)cout << "栈为空,无法删除栈顶元素!" << endl;s.top--;return *s.top;}//按先序输入字符创建二叉树void CreateBiTree(BiTree &T) {char ch;//接受输入的字符ch = cin.get();if(ch == ' ') {//分支结束T = NULL;} //if' 'endelse if(ch == '\n') {cout << "输入未结束前不要输入回车,""要结束分支请输入空格!(接着输入)" << endl;} //if'\n'endelse {//生成根结点T = (BiTNode * )malloc(sizeof(BiTree));if(!T)cout << "内存分配失败!" << endl;T->data = ch;//构造左子树CreateBiTree(T->lchild);//构造右子树CreateBiTree(T->rchild);} //Create end}//输出e的值,并返回ElemType PrintElement(ElemType e) {cout << e << " ";return e;}//中序遍历二叉树的非递归函数void InOrderTraverse(BiTree p, SqStack &S) {cout << "中序遍历结果:";while(S.top != S.base || p != NULL) {if(p != NULL) {Push(S,p);p = p->lchild;} //if NULL endelse {BiTree bi = Pop(S);if(!PrintElement(bi->data))cout << "输出其值未成功!" << endl;p = bi->rchild;} //else end} //while endcout << endl;}int _tmain(int argc, _TCHAR* argv[]){BiTNode *bt;SqStack S;InitStack(S);bt = NULL; //将树根指针置空cout << "老师要求的二叉树序列(‘空’表示空格):""12空空346空空空5空空,再回车!"<< endl << "请按先序输入一个二叉树序列(可另输入,但要为先序),""无左右孩子则分别输入空格。
实验五课程名称:大学计算机实验项目名称:Excel的应用2. 对一列数据进行通过excel求和函数进行求和,对另一列数据求最大值。
1)输入两列数据,单击需要算出和的单元格,进入功能区的“公式”,点击“插入函数”,在弹出的对话框中选择“Sum”函数,点击确定后在随后的对话框中选择求和的数的范围,再次点击确认即可。
2)单击需要算出和的单元格,进入功能区的“公式”,点击“插入函数”,在弹出的对话框中选择“Max”函数,点击确定后在随后的对话框中选择求最大值的数的范围,再次点击确认即可。
3. 验证数据有效性,验证是否有来自“北京”“上海”之外的地区(P127)1)选中“地区”那列所有数据,在功能区找到“数据”,在“数据工具”找到“数据验证”,点进去,在弹出的对话框中,在“设置”选项卡里找到“允许”的下拉列表,选择“序列”,在“来源”输入“北京,上海”,其中逗号用半角模式下的英语模式的逗号。
点击确定即可。
如果再次输入“北京,上海”之外的数据就会提示错误,且可以制作下拉菜单。
4. 自动筛选出销售数量大于100000的行(P128~P129)1)点击清单中任意一个单元格,在功能区找到“数据”,在其中找到“筛选”,单击后,找到“销售与数量”旁边的下拉按钮,点进去出来一个菜单,点击“全选”,再在“数字筛选”的下一级菜单中选择“大于”,在点击后弹出的对话框中输入“100000”,点击确定即可,设置完成后可以发现,全部的销售数量都低于100000,故全部都消失。
5.实现案例5-161)输入基础数值如下2)单击E2单元格开始编辑,输入公式“=PMT(B2/12,C2*12,D2)”,按下回车键即可自动计算月供金额。
再选中该单元格,单击右键,在弹出的菜单中找到“设置单元格式”,单击进入,选择第二个格式即可。
3)在B5单元格输入公式“=E2”4)选择数据区域B5:I10,单击“数据”选项卡上的“数据工具”组中的模拟分析的下拉按钮,选择“模拟运算表”,在弹出的对话框中在“输入引用行的单元格”旁输入“D2”,在“输入引用列的单元格”旁输入“C2”点击确定即可。
实验五:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握查询条件种类和表示方法;3.掌握连接查询的表示及使用;4.掌握嵌套查询的表示及使用;5.了解集合查询的表示及使用。
二、实验环境已安装SQL Server企业版的计算机(120台);具有局域网环境,有固定IP;三、实验学时2学时四、实验要求1.了解SELECT语句的基本语法格式和执行方法;2.了解连接查询的表示及使用;3.了解嵌套查询的表示及使用;4.了解集合查询的表示及使用;5.完成实验报告;五、实验内容及步骤1.利用Transact-SQL嵌套语句实现下列数据查询操作。
1) 查询选修了计算机体系结构的学生的基本信息。
select*from studentwhere Sno in(select Sno from coursewhere Cno in(select Cno from sc where Cname='计算机体系结构'))2) 查询年龄比李勇小的学生的学号和成绩。
select a.sno,grade from student a,coursewhere a.sno=course.sno and sage<(select sage from student where sname='李勇')3) 查询其他系中比系编号为‘D1’的学生中年龄最小者要大的学生的信息。
select*from student where dnum<>'D1'AND SAGE>(select min(sage)from student where dnum='D1')4) 查询其他系中比系编号为‘D3’的学生年龄都大的学生的姓名。
select*from student where dnum<>'D3'AND SAGE>all(selectsage from student where dnum='D3')5) 查询‘C1’课程的成绩高于70的学生姓名。
实验训练5:存储过程与函数的构建与使用一、存储过程与函数的概念存储过程和函数都是数据库中的可执行代码,可以被多次调用和重复使用。
存储过程是一组预定义的SQL语句集合,可以在数据库中定义和存储。
而函数是一个独立的代码块,它接收输入参数并返回一个值。
二、存储过程的构建与使用1. 创建存储过程在MySQL中,创建存储过程需要使用CREATE PROCEDURE语句。
例如:CREATE PROCEDURE myproc()BEGINSELECT * FROM mytable;END;这个例子创建了一个名为myproc的存储过程,它会查询mytable表中的所有数据。
2. 调用存储过程使用CALL语句可以调用已经创建好的存储过程。
例如:CALL myproc();这个语句会执行myproc存储过程中定义的SQL语句。
3. 存储过程参数我们可以给存储过程添加参数来使其更加灵活。
例如:CREATE PROCEDURE myproc(IN p1 INT, IN p2 VARCHAR(50)) BEGINSELECT * FROM mytable WHERE column1 = p1 AND column2 = p2;END;这个例子创建了一个带有两个输入参数p1和p2的存储过程,它会查询mytable表中column1等于p1并且column2等于p2的数据。
4. 存储过程变量除了参数之外,存储过程还可以使用变量来存储中间结果。
例如:CREATE PROCEDURE myproc(IN p1 INT)BEGINDECLARE v1 INT;SET v1 = p1 * 2;SELECT * FROM mytable WHERE column1 = v1;END;这个例子创建了一个带有一个输入参数p1和一个变量v1的存储过程,它会将p1乘以2并将结果存储在v1变量中,然后查询mytable表中column1等于v1的数据。
五. 讨论分析当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下例如求020sin 35=-+-x x e x 的根,其中控制精度1010-=eps ,最大迭代次数40=M ,在steffensen 加速迭代方法的程序中,我们只需改动:it_max=40; ep=1e-10, 其余不变 。
利用以上程序,我们只需输入:phi=inline('exp(5*x)-sin(x)+(x)^3-20');[x_star,index,it]=steffensen(phi,0.5)可得:x_star = 0.637246094753909index = 0it = 41观察上述结果,index = 0,it = 41表明迭代失败,所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败六. 改进实验建议根据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我们才将这个大概值代入Newton 法或者Steffensen 中进行求解。
当然,我们可以用其他数学软件实现Newton 迭代法,我们可以用z-z 超级画板,其操作流程为:牛顿迭代法的公式是:x n+1=x n-f(x n)/f'(x n)。
下面我们就用牛顿迭代法设计程序求方程f(x)=ln(x)+2*x-6的近似解。
(一)观察方程f(x)=0的零点位置(1)显示坐标系的坐标刻度。
(2)作出函数y=ln(x)+2*x-6的图像,如下图所示:可以观察到方程的根在区间[2,3]上,我们可以设定近似解的初始值为2。
(二)设计求方程近似解的程序(1)在程序工作区中输入:f(x){ln(x)+2*x-6;}执行后,返回结果为:>> f(x) #这表示在计算机已经完成了函数f(x)的定义。
(2)定义f(x)的导函数g(x),在程序工作区中输入:Diff(f(x),x);执行后,返回结果为:>> 2+1/x #得到了f(x)的导函数。
C语⾔实验五最简单的C语⾔程序设计实验5:最简单的C语⾔程序设计⼀、实验⽬的:(1)掌握C语⾔中使⽤最多的⼀种语句——赋值语句的使⽤⽅法。
(2)掌握各种类型数据的输⼊输出的⽅法,能正确使⽤各种格式转换符。
(3)进⼀步掌握编写程序和调试程序的⽅法。
⼆、实验内容和步骤:1、通过下⾯的程序掌握各种格式转换符的正确使⽤⽅法。
(1)输⼊以下程序:/* Note:Your choice is C IDE */# includeint main( ){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61,b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3157.890121;g=0.123456789;m=50000;n=-60000;p=32768;q=40000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d\np=%u,q=%u\n",f,g,m,n,p,q);显⽰结果:(2)运⾏此程序并分析结果。
(3)在此基础上,将程序第10~14⾏改为c1=a,c2=b;f=3157.890121;g=0.123456789;d=f;e=g;运⾏程序,分析结果。
/* Note:Your choice is C IDE */#include"stdio.h"int main(){int a,b;float d,e;char c1,c2;double f,g;long m,n;unsigned int p,q;a=61;b=62;c1=a;c2=b;f=3157.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;printf("a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n",a,b,c1,c2,d,e);printf("f=%15.6f,g=%15.12f\nm=%1d,n=%1d\np=%u,q=%u\n",f,g,m,n,p,q);}显⽰结果:(4)⽤sizeof运算符分别检测程序中各类型的数据占多少字节。
《实验活动5不同价态含硫物质的转化》教案、导学案
一、实验目的:
1、掌握不同价态含硫物质的分析方法;
2、理解不同价态含硫物质的转化和过程;
3、获得针对不同价态含硫物质的调控技术。
二、实验原理:
含硫物质在环境和生物过程中的价态转化具有显著的环境意义。
一般情况下,含硫物质可以以硫酸根、亚硫酸根、亚硫醇等有机形式存在,以及无机形式的硫元素存在。
它们在环境中可以相互转化,也可以由其他无机和有机元素转化而来。
它们可以在植物体内累积、迁移和转化,也可以在土壤、水质中转化并影响物种的生态过程。
三、实验材料和方法:
1、实验可以采用典型的无机、有机含硫物质和硫环物质模拟实验,包括SO
2、H2S、CH3SH、SO42-、HS-等,运用多种仪器设备和技术分析不同价态含硫物质的转化情况;
2、采用一定量的硫元素(或有机物质),放入离心管中,并加足量氯化钠溶液以及除去杂质物质(通常为碳酸根);
3、在不同温度和水溶液条件下,将管子进行加热、离心、分离等操作,得出不同价态含硫物质的分离结果;
4、在各种操作条件下,运用ICP-MS、ICP-OES等仪器,分析不同价态含硫物质的转化情况;
5、根据分析结果,结合实验所使用的操作条件,获得环境中不同价态含硫物质的转化情况及相关调控技术。
四、实验结果:
实验结果可以表明:在硫元素介质下,含硫物质的价态可以从硫酸根和亚硫酸根转变成硫元素形式;在氯化钠介质下,硫元素以及硫酸根和亚硫酸根可以转变成亚硫醇等有机形式存在;
同时,实验可以得出控制不同价态含硫物质在环境中的转化的相关技术,可以有效的调控环境中含硫物质的浓度,从而减少对环境的危害。
板式塔流动特性实验一、目的要求1、观察板式塔各类型塔板的结构,比较各塔板上的气液接触状况。
2、测定筛板塔中两相流体在塔板上的流动特性3、考察塔板上的气液接触方式、操作状况及变化规律,寻求适宜操作范围4、掌握板式塔流动特性的实验研究方法。
二、实验原理2.1塔板的组成各种塔板板面大致可分为三个区域,即溢流区、鼓泡区和无效区。
降液管所占的部分称为溢流区。
塔板开孔部分称为鼓泡区,即气液两相传质的场所,也是区别各种不同塔板的依据。
图1中环形区域为无效区。
在液体进口处易自板上孔中漏下,故设一不开孔区,称为进口安定区;而在出口处,由于进降液管的的泡沫较多,因此设定不开孔区来破除一部分泡沫,又称破沫区。
图1 塔板板面2.2常用塔板类型泡罩塔这是最早应用于生产上的塔板之一(图2a)。
塔板上装有升气管,其上覆盖着一只泡罩,下边缘或开齿缝或不开齿缝,操作时气体从升气管上升经泡罩塔与升气管间的环隙后从泡罩下边缘或经齿缝进入液层。
泡罩塔板操作稳定,传质效率也较高。
但也有不少缺点:结构复杂、造价高、塔板阻力大。
塔板上的液面落差较大,易使气流分布不均造成气液接触不良。
筛板塔筛板塔也是最早出现的塔板之一(图2b)。
筛板就是在板上打许多筛孔,操作时气体直接穿过筛孔进入液层。
筛板塔的优点是构造简单、造价低、能稳定操作、板效率也较高。
缺点是小孔易堵,操作弹性和板效率比下面介绍的浮阀塔板略差。
浮阀塔这种塔板见图2c,是在20世纪40~50年代才发展起来的,现在使用很广。
其特点是当气流在较大范围内波动时均能稳定地操作,弹性大,效率好,适应性强。
浮阀塔板的结构特点是将浮阀装在塔板上的孔中并能自由地上下浮动,随气速的不同,浮阀打开的程度也不同。
(A )泡罩塔(B )筛板塔(C )浮阀塔 图2 常用塔板示意图2.3 板式塔原理气体通过塔板时,因阻力造成ΔP 的压力降ΔP 应为气体通过干塔板的压力降ΔP d 与气体通过塔板上液层的压力降ΔP l 之和d l P P P ∆+∆=∆(1)其中,气体通过干板的压力降与气体通过筛孔的速度a u 之间的关系为:22a g d u P ρς⋅=∆(2)或者:gu g P h l a g l dρρζρ22⋅=∆=∆(3) 对上式两边取对数,可得:a l gu g h ln 22ln ln +⎪⎪⎭⎫⎝⎛⋅=∆ρρζ(4) 式中a u 为气体通过筛孔的速度,m·S -1;g ρ和l ρ为气体和液体的密度,kg·m -3;ζ为干板阻力系数。
所以,以h ∆ln 为纵坐标,a u ln 为横坐标,可以得出一条斜率为2的直线,从直线与横坐标的交点可以求出干板阻力系数ζ。
对筛孔塔板,可由实验直接测定干板压降h ∆与筛孔速度a u 的变化关系,在双对数坐标上给出—条直线,如图3所示。
由此线可以拟合得出干板阻力系数ζ值。
图3气体通过塔板的压力降与孔速的关系 图4板式塔的压力降与空塔气速的关系气体通过塔板上液层的压力降l P ∆主要是由克服液体的表面张力和液层重力所造成的。
液层压力降l P ∆可简单地表示为:gh P P P l f d l ρε=∆-∆=∆或df h h h ∆-∆=∆式中,f h 为板上液层高度,m ,相当于溢流堰的高度w h 和堰上液层的高度ow h 之和;ε 称为充气系数或发泡系数。
气体通过湿塔板的总压力降P ∆和塔板上液层的状况,将随着气流速度的变化而发生如下阶段性的变化(如图4所示)。
(1)当气流速度较小时,塔板上未能形成液层,液体全部由筛孔漏下,在这个阶段,塔板的压力降随气速增大而增大。
(2)当气流速度增大到某一数值时,气体开始拦截液体,使塔板上开始积存液体而形成液层。
该转折点称为拦液点,如图中的A 点。
这时气体的空塔速度称为拦液速度。
(3)当气流速度略为增加时,塔板上液层将很快上升到溢流堰的高度,塔板压力降也随之急剧增大。
当液体开始由溢流堰溢出时,为另一个转折点,如图4中的B 点。
这时,仍有部分液体从筛孔中泄漏下去。
自该转折点之后,随着气流速度增大,液体的泄漏量不断减少,而塔板的压力降却变化不大。
(4)当气流速度继续增大到某一数值时,液体基本上停止泄漏,则称该转折点为泄漏点,如图4中的C 点。
自C 点以后,塔板的压力降随气速的增加而增大。
(5)当气速高达某一极限值时,塔板上方的雾沫挟带将会十分严重,或者发生液泛,自该转折点(如图4中D 点)之后,塔板压降会随气速迅速增大。
塔板上形成稳定液层后,塔板上气液两相的接触和混和状态,也将随着气速的改变而发生变化。
当气速较小时,气体以鼓泡方式通过液层,随着气速增大,鼓泡层逐渐转化为泡沫层,并在液面上形成的雾沫层也将随之增大。
对传质效率有着重要作用的因素是充气液层的高度及其结构。
充气液层的结构通常用其平均密度大小来表示。
如果充气液层内的气体质量相对于液体质量可略而不计,则l l f f h h ρρ=f ρ和l ρ分别表示充气液层与静液层的密度。
kg·m -3;f h 和l h 分别表示充气液层与静液层的高度,m 。
若将充气液层的平均密度与静液层密度之比定义为充气液层的相对密度,即f l l f h h==ρρφ则单位体积充气液层中滞留的气体量,即持气量可按下式计算:φ-=-=1flf g h h h V单位体积充气液层中滞留的液体量,即持液量又可按下式计算:φ==fll h h V气体在塔板上的液层内的平均停留时间为φφφg l V f g u h g q S h t )1()()1(-=-=液体在塔板上的平均停留时间为l lV l V f l u hl q S h l q S h t ===)()(φ式中S 为空塔横截面积,m 2;)(l q V 为液体体积流量,m 3·S -1;)(g q V 气体体积流量,m 3·S -1;g u 为气体的空塔速度,m 2·S -1。
塔板的压力降和气液两相的接触与混合状态不仅与气流的空塔速度有关,还与液体的喷淋密度,两相流体的物理化学性质和塔板的型式与结构(如开孔率和溢流堰高度)等因素有关。
这些复杂关系只能通过实验进行测定,才能掌握其变化规律。
对于确定型式和结构的塔板,则可通过实验测定来寻求其适宜操作区域。
三、仪器试剂板式塔实验装置一套板式塔实验装置如图5所示,水由增压泵经过转子流量计,从塔顶流入塔内,并从塔底流入储水槽。
从塔板泄露的液体,可以从塔底排放口排出。
由微音气泵来的空气通过流量调节阀和转子流量计进入塔底,经过塔板后从塔顶排出。
气体流经筛孔板和浮阀板过程中的压力降由U 型压差计显示。
1.增压水泵;2. 调节阀;3. 流量计;4. 无降液管筛孔板;5.浮阀板;6. 带降液管筛孔板;7. 泡罩板;8. 风机;9. 浮阀板水柱压差计;10. 筛孔板水柱压差计图5 板式塔流动特性试验装置四、实验步骤(实验前,确保微音气泵的放空阀完全打开。
微音气泵工作期间严禁同时关闭流量调节阀和放空阀!)(1) 干板试验:在微音气泵的放空阀完全打开的条件下,打开微音气泵的电源,联合调节流量调节阀和旁路放空阀,逐渐增大气体流量,记录流量计的读数和干板压降,测取6组数据。
(2) 塔板流动特性试验:打开增压水泵,缓慢打开流量计,调节水的喷淋密度,固定喷淋密度不变,调节空气流量,记录不同空气流量下筛孔板总压降,塔板上充气液层高度等数据。
在全部量程范围内,测取20组数据,尤其是在各转折点附近,空塔速度变化的间隔应小一些为宜,实验过程中应仔细观察并记录塔板上气液接触和混合状态的发展变化过程,特别要注意各阶段的转折点。
实验结束时,先关闭增压水泵电源和进水阀门,然后完全打开微音气泵的放空阀,再将空气流量调节阀关严,最后关闭微音气泵的电源。
五、数据记录与处理1.基本参数(1)设备结构参数筛板塔规格(2)操作参数2.数据记录和处理(1)干板试验(2)塔板流动特性试验(3)在坐标纸上标绘出h ∆ln 与a u ln 之间的关系曲线,并通过曲线拟合建立回归方程。
然后由直线与横坐标的交点可以求出干板阻力系数ζ。
(4)在坐标纸上标绘出在某一喷淋密度下塔板压降与空塔速度之间的关系曲线,并标出各转折点的气流速度及适宜操作区域。
六、注意事项:(1) 对于没有过载保护的空气泵,切不可在所有出口全部关闭的情况下启动和运行,以防烧坏电机。
空气源的启动和空气流量的调节,必须严格按规程操作,用旁路阀和空气流量调节阀联合进行调节。
一定要在熟悉阀门的使用方法之后才能启动电机。
(2)实验涉及到2个测压点,在动手进行实验之前应熟悉每一个U 形管的用途。
由于实验仪器本身的原因,在每一个转折点处,实验现象不一定很明显,注意解释原因。
六、思考题1、气体通过干板的压力降与气体通过筛孔的速度a u 之间的关系严格说来,应该满足下式:2na g d u P ρς=∆,如果使用该式,数据处理过程如何进行?2、本实验对于工业生产过程有什么意义?。