计算命题演算公式的真值.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
v1.0可编辑可修改 v1.0可编辑可修改 PAGE PAGE # 四计算命题演算公式的真值 一?实验题目 所谓命题演算公式是指由逻辑变量(其值为 TRUE或 FALSE和逻辑运算符人(AND、 V ( OR和「( NOT按一定规则所组成的公式 (蕴含之类的运算可以用人、 V和「来表示) 公式运算的先后顺序为「、人、V,而括号()可以改变优先次序。已知一个命题演算公式 及各变量的值,要求设计一个程序来计算公式的真值。 要求: 利用二叉树来计算公式的真值。首先利用堆栈将中缀形式的公式变为后缀形式; 然后根据后缀形式,从叶结点开始构造相应的二叉树; 最后按后序遍历该树, 求各子树之值, 即每到达一个结点,其子树之值已经计算出来, 当到达根结点时,求得的值就是公式之真值。 逻辑变元的标识符不限于单字母,而可以是任意长的字母数字串。 根据用户的要求显示表达式的真值表。 二?实验设计 设计思想 (1)数据结构设计 a 建立一个链式堆栈,实现括号的匹配问题。 b 建立一个顺序堆栈,来实现中缀转后缀并实现二叉树的打印。 (2 )算法设计 a.括号匹配b中缀转后缀c打印二叉树和真值表 设计表示 自定义和调用的函数如下所示: #i nclude #i nclude #in clude #in clude #in clude #in clude #in clude 函数说明如下 SeqStackl; /*定义一个堆栈 SeqStackl; /* 定义一个堆栈 SeqStackl*/ 初始化堆栈1 初始化堆栈1,栈底为’# 将元素压入堆栈1*/ 弹出堆栈1的栈顶元素*/ 取堆栈1的栈顶元素*/ 定义一个顺序堆栈 SeqStack2*/ 初始化堆栈2*/ 从堆栈2中弹出栈顶元素*/ 定义二叉树的结点*/ 初始化树的根结点*/ 逆时针打印二叉树*/ *x) /* 将二叉树结点压入堆栈 TOC \o 1-5 \h \z void StackI ni tiate1(SeqStack1 *S) /* */ void StackPush1(SeqStack1 *S,DataType x) /* void StackPop1(SeqStack1 *S,DataType *x) /* int StackTop1(SeqStack1 S,DataType *d) /* SeqStack2; /* void StackI ni tiate2(SeqStack2 *S) /* BiTreeNode * StackPop2(SeqStack2 *S) /* BiTreeNode; /* void Ini tiate(BiTreeNode **root) /* void print(BiTreeNode *bt,int n) /* void StackPush2(SeqStack2 *S,BiTreeNode 2*/ int Con vert(char a[500],char b[500][100],SeqStack1 *S,i nt n) /* 将待求表 达式转换为后缀形式*/ BiTreeNode * BuildTree(char b[500][100],i nt n)/* 根据表达式的后缀形式,构 造相应的二叉树*/ LSNode; /* 定义了链式堆栈用于下面检测表达式的括号匹配 */ void StackInitiate(LSNode** head) /* 初始化堆栈 */ int StackNotEmpty(LSNode* head) /* 检测堆栈是否为空的函数 */ int StackPush(LSNode* head,DataType x) /* 将元素入栈 */ int StackPop(LSNode* head,DataType* d) /* int StackTop(LSNode* head,DataType *d) /* void Destroy(LSNode* head) /*void ExplsCorrect(char exp[]) /* int StackPop(LSNode* head,DataType* d) /* int StackTop(LSNode* head,DataType *d) /* void Destroy(LSNode* head) /* void ExplsCorrect(char exp[]) /* 弹出栈顶元素*/ 取栈顶元素*/ 撤消*/ 检测输入表达式的括号匹配函数 */ 3?详细设计 void StackI ni tiate(LSNode** head) { if((*head=(LSNode*)malloc(sizeof(LSNode)))==NULL)exit(1); (*head)-

文档评论(0)

dianxin1241 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档