题目描述

同学们都学习过《离散数学》这门课程,知道真值表是用于逻辑中的一类数学用表,用来计算逻辑表示式在每一个逻辑变量取值组合下的值。在这里我们给定一个逻辑表达式,要求生成对应的真值表。提示一下,数据结构教材中介绍了数学表达式的处理算法,可以将其改造以适用于我们的项目。
      项目分为三个子项目,第一部分为词法分析,即将逻辑表达式分隔为多个词(token)。下面给出两个例子。
例一:
        逻辑表达式p^q中有p、^和q共三个词;
例二:
        逻辑表达式p^(q^r)中有p、^、(、q、^、r和)共七个词。

逻辑联结词有五个,见下表,这些符号和教材上的有所不同,主要是为了方便。

否定 合取 析取 蕴涵  等值
! ^ || -> <->

引入括号,规定基本逻辑联接词优先顺序从高到低依次是:( )、!、∧、||、->、<->。 同一优先级,从左到右顺序进行。

输入

输入由多行组成,每行都是一个正确的逻辑表达式。

逻辑表达式小于100个字符。
一个正确的逻辑表达式可以包含小写字母,空格和逻辑联结词(含括号)。单个小写字母表示一个逻辑变量,一个表达式中逻辑变量的个数不超过10。空格作为分隔符, 不是词,同一个词的字符之间不能有空格。

输出

每一个逻辑表达式产生如下的输出:
第一行按顺序输出表达式中的所有词。每个词之间用空格分开。
第二行按字母序输出表达式中的所有逻辑变量,用空格分开。
第三行开始输出逻辑变量值的所有组合情况。

具体见样例。

样例输入 Copy

p
p->q
p||q

样例输出 Copy

p
p
1
0
p -> q
p q
1 1
1 0
0 1
0 0
p || q
p q
1 1
1 0
0 1
0 0

代码

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){char s[103];while(gets(s)){int sum=strlen(s);int flag=0;for(int i=0;i<sum;i++){if(s[i]!=' ')printf("%c",s[i]);if(s[i]<='z'&&s[i]>='a'){flag++;printf(" ");}if(s[i]!=' '&&!(s[i]<='z'&&s[i]>='a')&&!(s[i]=='-'&&s[i+1]=='>')&&!(s[i]=='|'&&s[i+1]=='|')&&!(s[i]=='<'&&s[i+1]=='-'&&s[i+2]=='>')&&!(s[i-1]=='<'&&s[i]=='-'&&s[i+1]=='>')&&!(s[i-2]=='<'&&s[i]=='-'&&s[i+1]=='>'))printf(" ");}    printf("\n");for(int i=0;i<sum;i++)for(int j=0;j<sum;j++)if(s[i]==s[j]&&i!=j&&s[i]<='z'&&s[i]>='a'){s[i]='1';flag--;}for(int i=0;i<sum;i++)for(int j=0;j<sum;j++){if(i<j&&s[i]>s[j]&&s[i]<='z'&&s[i]>='a'&&s[j]<='z'&&s[j]>='a'){char l=s[i];s[i]=s[j];s[j]=l;}}for(int i=0;i<sum;i++)if(s[i]<='z'&&s[i]>='a')printf("%c ",s[i]);printf("\n");for(int j=1;j<=pow(2,flag);j++){int f= pow(2,flag);int d=flag-1;int k=(j-1)%f;if(j==pow(2,flag)+1)k=pow(2,flag);     for(int i=0;i<sum;i++){if(s[i]<='z'&&s[i]>='a'){int b=pow(2,d);if(b==1){int c=j/b;    if((c%2==0))printf("0 ");else printf("1 ");}else {int c=k/b; if((c%2==0))printf("1 ");else printf("0 ");}d--;}}    printf("\n");}}return 0;
}

问题 F: 真值表(Ⅰ)相关推荐

  1. 问题 F: 真值表(Ⅰ) 2022

    问题 F: 真值表(Ⅰ) 时间限制: 1 Sec 内存限制: 128 MB 提交: 4527 解决: 469 [状态] [提交] [命题人:cyh] 题目描述 同学们都学习过<离散数学>这 ...

  2. 汇编语言布尔表达式(NOT、AND、OR)

    布尔代数(boolean algebra)定义了一组操作,其值为真(true)或假(false).它的发明者是十九世纪中叶的数学家乔治・布尔(George Boole). 在数字计算机发明的早期,人们 ...

  3. 离散数学 - 第一章 命题和命题公式

    第一章 命题和命题公式 学习目标 1.理解命题的概念,能够正确的判别什么是命题,并能够给出命题的真值 ①具有唯一真值的陈述句称作命题.真值为真的命题称为真命题,真值为假的称为假命题. ②由原子命题通过 ...

  4. 定时器驱动数码管c语言,第五章 定时器和数码管

    1.1基本数字逻辑门电路 不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解一下,知道有这么回事,回头遇到了,再详细研究. 首先,在"逻辑&qu ...

  5. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模

    传送门 文章目录 题意: 思路: 题意: 你现在有ppp种电台,有nnn对关系(x,y)(x,y)(x,y)代表xxx电台或yyy电台中至少有一个,mmm对关系(x,y)(x,y)(x,y)代表xxx ...

  6. 用java输出真值表离散数学_离散数学 第一章 命题逻辑 1-4真值表与等价公式

    定义1-4.1在命题公式中,对于分量指派真值的各种可能组合,就确定了这个命题公式的各种真值情况,把它汇列成表,就是命题公式的真值表. 现举例说明如下: 例题1 构造┓p∨q的真值表. 解 表1-4.1 ...

  7. 论如何通过真值表来求逻辑函数

    1.废话:就是在HDLbits刷题拿到真值表的时候忘记了如何去求出其逻辑函数,从而写下这篇博文,好吧,这等数字电路基础知识也能忘,你不咸鱼谁咸鱼. 2.正题: 如上,该题即用与或非等基础门描述上述真值 ...

  8. 改进的判定条件覆盖讲解和真值表书写

    即Modified Condition/Decision Coverage,缩写为MC/DC. 其中判定是指决定if或者循环语句是否执行的那个逻辑表达式. 基本思路.逻辑与表达式测试所有条件为真的情况 ...

  9. 如何用MATLAB绘制真值表,编写真值表 - MATLAB Simulink - MathWorks 中国

    编写真值表 在创建新真值表后,您就可以对它进行编写以根据您的设定执行.要编写真值表,您需要添加条件.决策和动作.有关创建真值表的详细信息,请参阅使用真值表对组合逻辑建模. 真值表仅在 Simulink ...

最新文章

  1. 僵尸进程的产生与处理
  2. python参数估计_用python求参数估计的置信区间
  3. 【转】VS2013中如何解决error C4996: 'fopen'问题
  4. 25利他行为可以学习和模仿吗
  5. 成都大数据等新经济代表行业在全国城市位居前列
  6. 11. SpringMVC拦截器(资源和权限管理)
  7. html5 ogv格式转换,Free OGV Video Converter(OGV视频转换器)
  8. 致敬!百里煤海战斗在第二战线上的人们
  9. 解释颜色深度概念:8 bit、16 bit、32 bit的意思
  10. BIOS设置|win10最快启动的方式
  11. 一次解决找不到 android.support.v7.XXX 问题
  12. 7月算法训练------第十四天(栈)解题报告
  13. phonegap-百度社会化分享-andriod插件-v2.0
  14. Office 365入门教程(一):开始使用Office 365
  15. vivado生成mig_Vivado 2015.1 MIG生成DDR4控制器例化问题求助!(急)
  16. OP向左,SaaS向右,如何选择?
  17. 简单记录fortran入门过程
  18. 当生活真的过得很艰难的时候,你是怎么熬过来的?(内容来自知乎,用于自省)...
  19. POJ 2240 Arbitrage 解题报告
  20. 【Orangepi Zero2 全志H616】wiringPi外设SDK安装

热门文章

  1. java调用百度地图API根据地理位置获取经纬度
  2. 主流分布式文件系统对比:区块链分布式技术引发云存储革命?HDFS,GFS,GPFS,FusionStorage,IPFS
  3. C++编程(一) :C++基础入门
  4. 在MS SQL語句中注意全角空格符和半角空格符的坑
  5. Android 高仿猎豹cm桌面,所有应用,快捷字母栏
  6. co01设置错误消息_pco01.dll文件下载,金山毒霸dll修复工具帮您解决文件丢失导致“pco01.dll找不到”的系统问题...
  7. [hadoop3.x]HDFS存储类型和存储策略(五)概述
  8. niuke --abc
  9. Windows 10 Cortana搜索栏无效变白色解决方案
  10. ATmega128单片机与舵机控制板通信