计算逻辑表达式真值和通用试题库设计.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)数据结构设计 包括逻辑结构设计和存储结构设计 用于中辍转换后缀的栈结构: 抽象为模板类: templatetypename Typeclass Stack { public: Stack(){}; ~Stack(){}; void Push(const Type item); Type Pop(void); Type Top(void)const; bool IsEmpty(void)const; private: std::vectorType m_Items; }; 用于从后缀表达式计算真值的二叉树 如算式:(abc*def)|(gh123(as45|qw45))转化后构造的二叉树如下: 二叉树抽象为: class Bitree//二叉树类 { 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)算法设计 中缀表达式变成后缀表达式: void Fomula::Transfer(); 在将中缀表达式变成后缀表达式的时候会用到堆栈,因此首先需要初始化一个堆栈。又由于逻辑变元可能是字符也可能是字符串,所以它又不同于将单字符的逻辑变元的中缀表达式变成后缀表达式。我的设计是这样的,我将中缀表达式变成后缀表达式的过程分成了两部:化简(将一维的复杂的中缀表达式变成一维的简单的中缀表达式,并将字符串逻辑变元存放在二维数组中),转化(将化简后的中缀表达式变成后缀表达

文档评论(0)

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

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

1亿VIP精品文档

相关文档