合肥学院计算机科学与技术系课程设计报告2025~2025 学年第 1 学期课程 数据结构与算法课程设计题目名称重言式的判别学生姓名学号专业班级计算机科学与技术 14 级 1 班指导老师2025 年 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)先取反,然后相与,后相或。(3)先括号内,后括号外。为统一算法的描述,将运算符和界限符统称为算符。这...