逻辑表达式等价判断

逻辑表达式等价判断题目要求 给出两个 c 语言中的逻辑表达式 判断两个表达式是否完全一样 对变量所有的取值 两个表达式的值一样 表达式中的变量可由字母 a z 中的任何一个表示 运算符由 或 amp 与 异或 非 组成 表达式中还可能有圆括号 各运算符的优先级跟 c 语言一样 输入每两行一组 分别为两个表达式 长度不大于 100 如果两个表达式一样 则输出 Equivalent 否则输出

题目要求:

给出两个c语言中的逻辑表达式,判断两个表达式是否完全一样(对变量所有的取值,两个表达式的值一样),表达式中的变量可由字母a-z中的任何一个表示,运算符由’|'(或),’&'(与),’^'(异或),’~'(非)组成,表达式中还可能有圆括号,各运算符的优先级跟c语言一样。
输入每两行一组,分别为两个表达式(长度不大于100).
如果两个表达式一样,则输出Equivalent,否则输出Different
如输入:
a^b&(b|a)
(a^(b&(b|a)))











a ^b&(b|a)
~b^a
输出为:
Equivalent









Different


话不多说,直接上源码:

源程序代码(编译环境Visual C++ 6.0


#include 
  
    #include 
   
     #include 
    
      //N为表达式的长度 #define N 105 int equal(char a[],char b[],int l1,int l2);//判断两个逻辑表达式是否等价 int getnumber(char a[],int l);//获取变量的个数 char cal(char a[],int l);//计算逻辑表达式的值 int pri(char ch);//判断符号的优先级 char c[26];//用来记录表达式中变量的个数以及变量的名称 int main() { char ans1[N],ans2[N]; int l1,l2;//两个表达式的长度 printf("请输入两个逻辑表达式\n"); while(scanf("%s%s",ans1,ans2)!=EOF) { l1=strlen(ans1); l2=strlen(ans2); if(equal(ans1,ans2,l1,l2)) printf("Equivalent\n"); else printf("Different\n"); } return 0; } int equal(char a[],char b[],int l1,int l2) { int i,j; char zhi1,zhi2; char ctemp[26];//分别位a,b,c的临时数组 char atemp[N]; char btemp[N]; int x=0,y=0;//a,b表达式中的变量个数 int n;//所有取值的种数 int tempn,max; char list[26];//变量取值表 y=getnumber(b,l2); x=getnumber(a,l1); // printf("变量个数:%d\n",x); max=x>y?x:y;//取两个表达式中变量(以多的为准) n=pow(2.0,max);//获取取值的总数,如3个变量有2^3种 // printf("取值种数:%d\n",n); while(n) { getnumber(a,l1); strcpy(ctemp,c);//还原 strcpy(atemp,a);//还原 tempn=n; for(i=x;i>=0;i--)//Max位变量取值表 { list[i]=tempn%2+'0'; tempn/=2; } j=1; for(i=0;i<26;i++)//构建26位取值表 { if(ctemp[i]!='0') { ctemp[i]=list[j++]; } } for(i=0;i 
     
       ='a'&&atemp[i]<='z') atemp[i]=ctemp[atemp[i]-'a']; } strcpy(btemp,b);//还原 for(i=0;i 
      
        ='a'&&btemp[i]<='z') btemp[i]=ctemp[btemp[i]-'a']; } zhi1=cal(atemp,l1);//计算结果 zhi2=cal(btemp,l2); if(zhi1!=zhi2)//判断两个表达式值是否相等 { return 0; } n--; } return 1; } int getnumber(char a[],int l) { int number=0;//变量的个数 int i; memset(c,'0',sizeof(c)); for(i=0;i 
       
         ='a'&&a[i]<='z') { c[a[i]-'a']+=1; } } for(i=0;i<26;i++) { if(c[i]!='0') { number++; } } return number; } char cal(char a[],int l) { int i; int top=0; int j=0; char stack[N];//利用栈将中序式转为后序式 char fin[N];//转换后的后序式 char result[N];//用来保存结果的栈 char ch; fin[0]='#'; for(i=0;i<=l;i++) { switch(a[i]) { case '\0': while(top>0) { fin[++j]=stack[top--]; } break; case '(': stack[++top]=a[i]; break; case '|': case '^': case '&': case '~': while(pri(stack[top])>=pri(a[i])) { fin[++j]=stack[top--]; } stack[++top]=a[i]; break; case ')': while(stack[top]!='(') { fin[++j]=stack[top--]; } top--; break; default: fin[++j]=a[i]; break; } } fin[++j]='\0'; top=0; for(i=1;i 
         
        
       
      
     
    
  





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220540.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:14
下一篇 2026年3月17日 下午8:15


相关推荐

  • Netty教程-Netty介绍

    Netty教程-Netty介绍Netty 是什么 Netty 是一个高性能 异步事件驱动的 NIO 框架 它提供了对 TCP UDP 和文件传输的支持 作为一个异步 NIO 框架 Netty 的所有 IO 操作都是异步非阻塞的 通过 Future Listener 机制 用户可以方便的主动获取或者通过通知机制获得 IO 操作结果 支持 HTTP WebSocket Protobuf BinaryTCP 和 UDP Netty 已经被很多高性能

    2026年3月18日
    2
  • java socket 实现原理_java socket原理

    java socket 实现原理_java socket原理TCP/IP模型中有5层结构:应用层、传输层、网络层、数据链路层以及物理层。其中IP协议是位于网络层的,TCP协议是位于传输层的,通过IP协议可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同的操作系统的网络,IP协议只能保证计算机能够接收和发送分组数据,当计算机要和远程的计算机建立连接时,TCP协议会让它们建立连接:用于发送和接收数据的虚拟电路。在Java中…

    2022年7月7日
    26
  • linux之fstab文件详解「建议收藏」

    linux之fstab文件详解「建议收藏」/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less/etc/fstab来查看,如果要修改的话,则用命令vi/etc/fstab来修改。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。

    2025年8月9日
    4
  • PHP怎样检测PHPINFO信息_PHP检测PHPINFO信息调用【查看】

    PHP怎样检测PHPINFO信息_PHP检测PHPINFO信息调用【查看】

    2026年3月12日
    2
  • uIP宏定义的详细配置

    uIP宏定义的详细配置转自 Jkf40622 的微博 地址 http m blog csdn net article details id 详细说明 uIP 针对每个工程都可以通过 uipopt h 进行配置 这个文件包含了 uIP 的所有编译时选项 应该针对每一个工程对这些选项进行调整 uIP 的发行版包含了一个文档化的 uipopt h 文件 用户可以复制和修改这个文件来达到调整选项的目的 注意

    2026年3月26日
    2
  • ElasticSearch 海量数据查询

    ElasticSearch 海量数据查询elasticsearc 海量数据查询 使用 RestHighLeve 多条件精确查询 多条件模糊查询 批量查询 全量查询

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号