- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实习报告重言式的判别
实习报告
题目:重言式的判定
班级:信管08-1 姓名:彭苗苗 完成日期:2010/ 6 /7
一、需求分析
1.一个逻辑表达式如果对于其变元的任一种取值均为真,则成为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式,然而,更多的情况下,既非重言式,也非矛盾式。写一个程序通过真值表判别一个逻辑表达式属于上述哪一类。基本要求如下:
(1)逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括“|”、“&”和“~”,分别表示或、与和非,运算优先程度递增,但可有括号改变,即括号内的运算优先。逻辑变元为大写字母。表达式中任何地方都可以含有多个空格符。
(2)若是重言式或矛盾式,可以只显示“True Forever”或“False Forever”,否则显示“Statisfactible”以及变量名序列,与用户交互。若用户对表达式变元取定一组值,程序就求出并显示逻辑表达式的值。
(3)本程序先使用栈将逻辑表达式的变量进行存储,然后将栈中的元素作为二叉树的结点结构,然后根据优先级读取表达式建立二叉树,并通过逐个判断根实现对重言式的判别。
2. 程序执行的命令
(1)输入逻辑表达式 (2)判断表达式是重言式还是矛盾式 (3)若既不是重言式也不是矛盾式,则对变元取定值,并显示逻辑表达式的值 (4)结束
3.测试数据
(1) (A|~A)(B|~B)
(2) (A~A)C
(3) A|B|C|D|E|~A
(4) ABC~B
(5) (A|B)(A|~B)
(6) A~B|~AB;
输出结果
True Forever
False Forever
True Forever
False Forever
Statisfactible
Statisfactible
二. 概要设计
1.为实现上述程序功能,需要两个抽象数据类型,如下:
(1)识别表达式使用的栈定义
ADT sqstack
{数据对象:D={ai| ai(ElemSet,i=1,2,...,n, n 0}
数据关系:R1={ ai-1 ,ai| ai-1, ai(D, i=1,2,...,n }
约定an端为栈顶,ai端为栈底。
基本操作:
initstack(stack s)
操作结果:构造一个空栈S。
gettop(st,e)
初始条件:栈S已存在且非空。
操作结果:用e返回S的栈顶元素
push(st,e)
初始条件:栈S已存在。
操作结果:插入元素e为新的栈顶元素。
pop(st,e) 初始条件:栈S已存在且非空。
操作结果:删除S的栈顶元素,并用e返回其值。
} ADT sqstack
(2)二叉树的定义
ADT bitree
{数据对象D:D={ai | ai∈ElemSet, i=1,2, …,n, n≥0}
数据关系R:若D为空集,则称为空二叉树。
若D仅含一个数据元素,则R为空集,否则R={H},H满足关系:
(1)??T中存在唯一的一个结点,它没有前驱,称为树的根,用root表示,在集合D中用a1表示;
(2)????? 若D中元素个数大于1,对于任意的数据元素aj∈D且j≥2,存在唯一的数据元素ai∈D,有ai, aj∈H;
(3)????? 若D中元素个数大于1,对于任意的数据元素ai∈D,仅存在不多于2个数据元素aj,ak∈D且j, k≥i,有 ai, aj , ai, ak ∈H,其中,若jk,则称aj为ai的左孩子节点,ak为ai的右孩子节点。
(4)????? 对于任意的数据元素aj∈D且j≥2,存在D1 D,D1={ aik| aik∈ElemSet, k=1,2, …,m, m≥0},有唯一的Pj={ai1, ai1, ai1, ai2, …, aim-1, aim, aim, aj},这个集合Pj表示从根结点到结点aj的一条路径。
基本操作P:
creattree(char *p,stack vari,stack symbol)
操作结果:构造二叉树。
int getvalue(bit root,int num[])
初始条件:二叉树已存在
操作结果:根据变量的取值进行求值
void user(bit root,int m,char b[])
初始条件:二叉树已存在
操作结果:输入变量的值,若求得逻辑表达式为1,则显示Ture,若求得逻辑表达式为0,则显示False
void judge(bit root,char bo[],int nu)
初始条件:二叉树已存在
操作结果:表达式若是重言式则返回true forever,若是矛盾式返回false forever,否则返回Statisfactible
}ADT bitree
2.本程序主要分为六个模块
(1)主程序
文档评论(0)