计算逻辑表达式真值和通用试题库设计.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算逻辑表达式真值和通用试题库设计

数据结构课程设计报告班级:191131班学号:20131000806姓名:指导老师:日期:2015/07/13题号9 题目:计算命题演算公式的真值所谓命题演算公式是指由逻辑变量(其值为TRUE 或FALSE)和逻辑运算符∧(AND)、∨(OR)和┐(NOT)按一定规则所组成的公式(蕴含之类的运算可以用∧、∨和┐来表示)。公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。已知一个命题演算公式及各变量的值,要求设计一个程序来计算公式的真值。要求:(1)程序运行有菜单选择。(2)利用二叉树来计算公式的真值。首先利用堆栈将中缀形式的公式变为后缀形式;然后根据后缀形式,从叶结点开始构造相应的二叉树;最后按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值。(3)逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串。(4)根据用户的要求显示表达式的真值表。需求分析1)由逻辑变量(其值为TRUE或FALSE)【实际操作使用,0代表FALSE,1代表TRUE)】和逻辑运算符∧(AND)、∨(OR)和┐(NOT)【实际操作使用代表AND,|代表OR,~代表NOT】按一定规则所组成的公式。公式运算的先后顺序为┐、∧、∨,而括号()可以改变优先次序。输入输出2)以人机对话的方式让用户输入要计算的命题表达式;计算出最后的真值并输到屏幕上。基本思想:①利用二叉树计算公式的真值:第一步:利用堆栈将中缀形式的公式变为后缀形式;第二步:根据后缀形式,从叶结点开始构造相应的二叉树;第三步:按后序遍历该树,求各子树之值,即每到达一个结点,其子树之值已经计算出来,当到达根结点时,求得的值就是公式之真值;②逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串;③根据用户的要求显示表达式的真值表。2.设计概要设计:2.1 设计思想(1)数据结构设计包括逻辑结构设计和存储结构设计用于中辍转换后缀的栈结构:抽象为模板类:templatetypenameTypeclassStack{public:Stack(){};~Stack(){};void Push(constType item);Type Pop(void); Type Top(void)const; bool IsEmpty(void)const;private:std::vectorType m_Items;};用于从后缀表达式计算真值的二叉树如算式:(abc*def)|(gh123(as45|qw45))转化后构造的二叉树如下:二叉树抽象为:classBitree//二叉树类{private:BitreeNodemyData *m_Root;void Print(BitreeNodemyData *node, int level)const;void Destroy(BitreeNodemyData * node);public:Bitree();~Bitree();void Visit(BitreeNodemyData *node)const;void Print()const; void Destroy();void MakeBitree(myData data, BitreeNodemyData *left,BitreeNodemyData *right, BitreeNodemyData *parent,bool sym);void MakeBitree(BitreeNodemyData *root);bool IsEmpty()const;};(2)算法设计中缀表达式变成后缀表达式:voidFomula::Transfer();在将中缀表达式变成后缀表达式的时候会用到堆栈,因此首先需要初始化一个堆栈。又由于逻辑变元可能是字符也可能是字符串,所以它又不同于将单字符的逻辑变元的中缀表达式变成后缀表达式。我的设计是这样的,我将中缀表达式变成后缀表达式的过程分成了两部:化简(将一维的复杂的中缀表达式变成一维的简单的中缀表达式,并将字符串逻辑变元存放在二维数组中),转化(将化简后的中缀表达式变成后缀表达式)。后缀表达式构造出二叉树:voidFomula::MakeBitree(void)在这个过程中,我用到了之前所定义的存放树的堆栈。具体实现为:扫描后缀表达式,如果遇到逻辑变元然后将这个变元变成一个树节点,它的实现就是将该逻辑变元赋给树的data域,然后将它的左右子树赋为NULL,然后将这个树节点压入相应的堆栈;接着继续扫描,如果遇到的是单目运算符(非号“!”)也将它构造成一个树节点然后从堆栈里面弹出一个树形节点,将弹出的元素的作为它的左子树,右子树设置为NULL,然后将这个树节点压入相应的堆栈;如果扫描到的是双目运算符(与号“”

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档