第5关:计算后缀式命题公式的真值

任务描述
本关任务:编写程序,计算后缀式命题公式在特定赋值下的真假值。

相关知识
为了完成本关任务,你需要掌握:
1.五个命题联接词的真值定义
2.后缀式的定义
3.后缀式的计算方法。

命题联接词的真值定义
为了输入方便,把教材中所使用的五个命题联接词符号(¬、 ∧、 ∨、→、↔),替换为(!、&、|、-、=)符号。其真值定义如下:

后缀式的定义
【后缀式(逆波兰式)】
一个表达式E的后缀形式可以如下定义:
(1)如果E是一个变量或常量,则E的后缀式是E本身。
(2)如果E是op E1 形式的表达式,op是任何一元元操作符,则E的后缀式为E1’op,E1’是E1的后缀式。
(3)如果E是E1 op E2形式的表达式,op是任何二元操作符,则E的后缀式为E1’E2’ op,这里E1’和E2’分别为E1和E2的后缀式。
(4)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。
例如:

后缀式计算算法
设A[]为后缀式存储数组
B[]为后缀表达式计算数组(可以理解为栈);初始化B[]数组中元素个数size=0;
for(i=0;i<strlen(A);i++)//遍历A数组中的各个字符
{
如果A[i]是操作数,则把A[i]存入B[]的末尾,B[size]=A[i],size++;
否则
{
若A[i]是单目运算符,与B[]的尾元素进行运算后替换尾元素;
否则
{
A[i]是双目运算符,则取出B[]的最后两个元素进行运算;
把结果存储B中的倒数第二位,并修改size–;
}
}
}
遍历A数组,并做上述操作后,B[0]即为结果。
【输入】
每份测试数据仅含有一组测试数据,输入命题变元个数n(1<=n<=10),再输入n个命题变元字符,再输入n个各命题变元的真假赋值,再输入长度不超过m(1<=m<=100)后缀表达形式的命题公式(不含命题变元与联接词之外的其他字符)。

【输出】
一组测试用例为一行输出,输出该测试用例中的后缀式命题公式在所输入的真值指派之下的真假值,如果命题公式为真,则输出“1”,否则输出“0”.

【输入样例】
2
pq
01
pq|
3
pqr
100
p!q&pq!&|r=

【输出样例】
1
0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值