下载后可任意编辑合肥学院计算机科学与技术系课程设计报告 ~ 第 1 学期课程 数据结构与算法课程设计题目名称重言式的判别学生姓名王 芳学号专业班级计算机科学与技术 14 级 1 班指导老师李红 何立新 9 月一、 题目【问题描述】一个逻辑表示式假如对于其变元的任一种取值都为真, 则称为重言式; 反之, 假如对于其变元的任一种取值都为假, 则称为下载后可任意编辑矛盾式; 然而, 更多的情况下, 既非重言式, 也非矛盾式。试写一个程序, 经过真值表判别一个逻辑表示式属于上述哪一类。【基本要求】(1) 逻辑表示式从终端输入, 长度不超过一行。逻辑运算符包括 "|", "&" 和 "~", 分别表示或、 与和非, 运算优先程度递增, 但可由括号改变, 即括号内的运算优先。逻辑变元为大写字母。表示式中任何地方都能够含有多个空格符。(2) 若是重言式或矛盾式, 能够只显示"True forever", 或"False forever", 否则显示 "Satisfactible" 以及变量名序列, 与用户交互。若用户对表示式中变元取定一组值, 程序就求出并显示逻辑表示式的值。 【测试数据】(1) (A|~A)&(B|~B)(2) (A&~A)&C(3) A|B|C|D|E|~A(4) A&B&C&~B(5) (A|B)&(A|~B)(6) A&~B|~A&B;O ,0;0,1;1,0;1,1 。二、 问题分析1、 一个逻辑表示式假如对于其变元的任一种取值均为真, 则称为重言式; 反之, 假如对于其变元的任一种取值都为假, 则称为矛盾式, 若对于其变元的任一种取值既有真, 又有假, 则称其为可满足式。写一个程序经过真值表判别一个逻辑表示式属于下载后可任意编辑上述哪一类。基本要求如下: 1)逻辑表示式从终端输入, 长度不超过一行。逻辑运算符包括”|”、 ”&”、 ”~”, 分别表示或、 与、 非, 运算优先程度递增, 但可有括号改变, 即括号内的运算优先。逻辑变元为大写字母。表示式中任何地方都能够含有多个空格符。2)若 是 重 言 式 或 矛 盾 式 , 能 够 只 显 示 ” True Forever”或”False Forever”, 否则显示运算中每种赋值和与其相对应的表示式的值。2、 经过真值表判别逻辑表示式是否为重言式, 需解决以下问题: 1)对逻辑表示式中空格符的处理。为了方便对逻辑表示式进行扫描推断, 应先去掉表示式中的空格符。2)算符的优先级问题在带括号的表示式中, 界限符包括左右括号以及表示式起始、 结束符”#”。对于一个简单的表示式求值运算规则如下: ( 1) 从左至右依次计算。( 2) 先取反,...