欢迎来到天天文库
浏览记录
ID:25414608
大小:65.50 KB
页数:17页
时间:2018-11-20
《计算逻辑表达式的值》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实习报告题目:计算逻辑表达式的值 实习时间:2007.6 实习者:086052-18王顺云1.需求分析(1)要求将一个逻辑运算表达式转换为二叉树结果,然后利用二叉树的后序遍历, 求解表达式的值。(2)表达式的值由用户输入,以t代表true,f代表false,最终计算的结果为true 或false。(3)程序以人机对话的方式执行。(4)测试数据:表达式为(A&&!B)
2、
3、(!A&&C)
4、
5、!C 变量值为:A=TRUE B=FALSE C=FALSE2.设计2.1设计思想 (1)存储结构 在程序中,先后使用了顺序表、二叉树的存储结构。
6、(2)主要算法的基本思想 A.用一个字符数组来存储逻辑表达式,然后利用堆栈将逻辑表达式的中缀形式转化为后 缀形式,并将后缀形式存储到队列中。 B.通过堆栈,将队列中的后缀表达式转化为一颗二叉树。 C.用户输入表达式中变量的值,将变量的值保存入一个线性表中,通过二叉树的后序遍 历与保存用变量值的线性表的结合,将结果计算出来,并存储到根结点中,然后就在 屏幕打印最终结果。2.2设计表示法 (1)过程或函数调用关系图 (2)基于数据结构的操作组 本次实习中用到了数组、堆栈、队列、二叉树等,基本基本上所有的函数都是基
7、 于数据结构的操作。 (3)过程或函数接口规格说明 /*将一个变量插入到堆栈中备用,如果插入前变量已经存在,则不插入,否则插入*/ voidappendvar(datatypex,vartypevars[]) /*处理表达式中的变量及变量值--根据变量,取出变量的值*/ datatypegetvalue(datatypex,vartypevars[]) voidinitializequeue(queuetype*q)/*队列的初始化*/ intappendqueue(queuetype*q,datatypex)/
8、*进队*/ datatypedeletequeue(queuetype*q)/*出队*/ voidinitializestack(stacktype*s)/*堆栈的初始化*/ intinsertstack(stacktype*s,datatypex)/*进栈*/ datatypedeletestack(stacktype*s)/*出栈*/ datatypegettopstack(stacktype*s)/*取栈顶元素*/ datatypepri(datatypex1,datatypex2)/*优先级比较*/ intpostf
9、ix(stacktype*s,datatype*expression,queuetype*q)/*中缀转化为后缀*/ intinitializetree(btreetype**bt)/*二叉树的初始化*/ intcreatebtree(queuetype*q)/*构造二叉树*/ datatypelist(btreetype*b)/*树的后序遍历*/2.3实现注释用户输入变量的是值时,只能输入t或者是f,来代表true或者是false。如果需要使用不同的表达式,只需要对程序进行简单的修改,即让用会自己来输入表达式。如果是用户自己输入表达式,那么表达式的长度不
10、能超过20个字符。用户手册(1)本程序在DOS环境下运行,文件名为true.exe(2)运行时,提示信息如下: Theexpressionis具体表达式 Inputthet(True)orf(False)onebyone: A=用户输入的值 …… Theresultis:计算的结果,要么是true,要么是false。4.测试结果 A=t,B=f,C=f 结果为true A=t,B=t,C=t 结果为false5.源程序清单True.c#include#include#include#include#defineMAXNUM20#defineNIL0t
11、ypedefchardatatype;typedefstruct/*定义堆栈类型*/{ datatypestack[MAXNUM]; inttop;}stacktype;typedefstruct/*定义队列类型*/{ datatypequeue[MAXNUM]; inthead; intlast;}queuetype;typedefstructbtree/*定义二叉树类型*/{ datatypedata; structbtree*lchild; structbtree*rchi
此文档下载收益归作者所有