怎样用C++实现逻辑表达式转换成真值表的程序

如题所述

第1个回答  2020-01-07
比较简单的一种是枚举输入量的组合值,所以计算复杂度是2^n,n表示变量个数。当然由于逻辑表达式比较简单,只有+
*

最后还有括号,比四则运算要简单的多。一个建议是使用修改的链表或者栈实现,毕竟输出真值表要枚举每个变量的真值。
建议的方式如下:使用链表或者数组存储表达式,节点类型可以自定义:包含一个指向外部的引用或者连接表示这个变量当前的值。然后使用栈将中缀表达式转化为后缀表达式进行压栈计算。依照枚举组合一次遍历链表。
请参考:数据结构-栈-四则计算(中缀表达式、后缀表达式)、链表、
以及《组合数学》组合生成算法
第2个回答  2020-01-31
(p∧(p->q))->q
p->q等价于(┐p)∨q写成c/c++语言就是(!p)||q
p∧(p->q)等价于p∧((┐p)∨q)写成c/c++就是p&&((!p)||q))
(p∧(p->q))->q等价于(┐(p∧((┐p)∨q)))∨q写成c/c++语言就是(!(p&&((!p)||q))))||q
programe
code:
#include
<iostream>
using
namespace
std;
int
main()
{
int
q,p;
cout<<"p
q
(p∧(p->q))->q\n";
for(p=0;p<=1;p++)
for(q=0;q<=1;q++)
cout<<p<<"
"<<q<<"
"
<<((!(p&&((!p)||q)))||q)<<endl;
}
//运行结果
p
q
(p∧(p->q))->q
0
0
1
0
1
1
1
0
1
1
1
1
其实你可以将表达式化简:
┐(p∧((┐p)∨q))∨q
<=>
┐((p∧┐p)∨(p∧q)))∨q
<=>
┐(0∨(p∨q)))∨q
<=>
1
∨((┐(p∨q))∨q)
<=>
1

怎样用C++实现逻辑表达式转换成真值表的程序
(P∧(P->Q))->Q p->Q等价于(┐P)∨Q写成C\/C++语言就是(!P)||Q P∧(P->Q)等价于P∧((┐p)∨Q)写成C\/C++就是P&&((!P)||Q))(P∧(P->Q))->Q等价于(┐(P∧((┐p)∨Q)))∨Q写成C\/C++语言就是(!(P&&((!P)||Q)))||Q Programe Code:include <iostream> using...

怎样用C++实现逻辑表达式转换成真值表的程序
(p∧(p->q))->q p->q等价于(┐p)∨q写成c\/c++语言就是(!p)||q p∧(p->q)等价于p∧((┐p)∨q)写成c\/c++就是p&&((!p)||q))(p∧(p->q))->q等价于(┐(p∧((┐p)∨q)))∨q写成c\/c++语言就是(!(p&&((!p)||q)))||q programe code:include <iostream> using...

用C++编程构造(P∧(P→Q))→Q的真值表
(P∧(P->Q))->Q p->Q等价于(┐P)∨Q写成C\/C++语言就是(!P)||Q P∧(P->Q)等价于P∧((┐p)∨Q)写成C\/C++就是P&&((!P)||Q))(P∧(P->Q))->Q等价于(┐(P∧((┐p)∨Q)))∨Q写成C\/C++语言就是(!(P&&((!P)||Q)))||Q Programe Code:include <iostream> using...

C++编程(逻辑推理)
貌似是和离散数学有关的,要先把命题符号化,然后进行推理,实际计算机执行的时候用真值表判断就可以了。。。程序写的一般,没用什么美观界面之类的,这些你都可以自己加,算法有很多,我用了一个比较简单易于理解的。程序得出的答案是ACDB;你看看吧,有问题在问我。。。include<iostream> include<vector...

c++里||是什么意思
直接返回真。同类型的还有&&逻辑与,当两个操作数都为真时,表达式的值为真,真值表:A B ∨ 真 真 真 真 假 假 假 真 假 假 假 假 逻辑与的"短路"效应是,如果第一个表达式的值为假,则不再计算第二个表达式的值,直接返回假 ...

怎样用真值表写出逻辑表达式来?
例1120 试根据表z1112,写出相应的逻辑表达式。从表中看到,当a=0、b=1时,y=1;当a=1、b=0时y=1。因此可写出相应的逻辑表达式为:y=b+a 真值表还可用来证明一些定理。例1121 试用真值表证明摩根定理=+ 证:设上式左边 =y1,右边=y2,分别列出相应的真值表如表z1113所示:比较...

数字电路里怎样从真值表中写出基本或钟控RS触发器的逻辑表达式?
这倒不难啊,看看几个书上的小例子吧,任何题都差不多。推荐看阎石的教材,上面说的很明白。其实重点倒在逻辑式的化简,比如如您所说的基本形式——用与非 或非与或非…… 以及各种RS触发器来表示并实现其功能的逻辑结构图

逻辑异或运算是什么
3、如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。4、逻辑异或运算简称异或。英文为exclusive OR,或缩写成xor。5、异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=...

逻辑与、逻辑或、逻辑非怎样用符号表示?
真值表法:采用一种表格来表示逻辑函数的运算关系,其中输入部分列出输入逻辑变量的所有可能组合,输出部分给出相应的输出逻辑变量值。相关信息:在各种计算机语言中,如C、C++、java等,使用按位异或的思想执行的操作。异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。“⊕”是异或数学...

用C语言实现离散数学中的命题逻辑(高悬赏追加悬赏,急)
include<stdio.h>void main(){int a, b, c;for(a=0; a<2; a++)for(b=0; b<2; b++)for(c=0; c<2; c++){if(a==1)if(c==1);else { continue; }if(b==1)if(c==0);else { continue; }if(c==0)if(a==1||b==1);else { continue; }if(a==1) printf(...

相似回答
大家正在搜