C语言 类似1∧1或T∧F这样的 命题运算式

C语言 实现 真值表

1.实验目的

掌握简单命题公式真值情况,了解如何自动求解简单命题公式的真值。

2.实验内容

输入:类似1∧1T∧F这样的命题运算式(必做)

输出:运算结果

要求:

(1)程序启动后,可以进行多次运算,直到退出程序

(2)要求实现否定、合取、析取、条件、双条件、排斥或,六中运算,具体运算符的表示可以自定义

(3)最好把每种运算定义为函数实现,或者使用的你所使用语言已有的运算实现

3.实验过程(主要思想、核心算法、核心代码)

主函数

#include <stdio.h>

#include <string.h>

void xiqu(char a[]);//析取

void stj(char a[]);//双条件

void tj(char a[]);//条件

void hequ(char a[]);//合取

void xiqu(char a[]);//析取

void fei(char a[]);//非

void bkjh(char a[]);//不可兼或

int main() {

       int i=0,j=0;

       char arr[100]="";

       while(1){

              printf("析取|,合取&,非!,条件-,双条件=,不可兼或/:");

       gets(arr);

       xiqu(arr);//析取

       hequ(arr);//合取

       fei(arr);//非

       bkjh(arr);//不可兼或

       stj(arr);//双条件

       tj(arr);//条件

       }

       return 0;

}

析取

void xiqu(char s[]){

       int a=0,b=0,k=0;

       for(int i=0;i<strlen(s);i++)

       {

              if(s[i]=='|'){

                     k=1;

                     if(s[i-1]=='1') a=1; else a=0;

                     if(s[i+1]=='1') b=1; else      b=0;

              }

       }

       if(k)

       printf("结果%d\n",a||b);

}

双条件

void stj(char s[]){

       int a=0,b=0,k=0;

       for(int i=0;i<=strlen(s);i++)

       {

              if(s[i]=='='){

                     k=1;

                     if(s[i-1]=='1') a=1; else a=0;

                     if(s[i+1]=='1') b=1; else      b=0;

              }

       }

       if(k)

       printf("结果%d\n",(!a||b)&&(!b||a));

}

条件

void tj(char s[]){

       int a=0,b=0,k=0;

       for(int i=0;i<strlen(s);i++)

       {

              if(s[i]=='-'){

                     k=1;

                     if(s[i-1]=='1') a=1; else a=0;

                     if(s[i+1]=='1') b=1; else      b=0;

              }

       }

       if(k)

       printf("结果%d\n",!a||b);

}

合取

void hequ(char s[]){

       int a=0,b=0,k=0;

       for(int i=0;i<strlen(s);i++)

       {

              if(s[i]=='&'){

                     k=1;

                     if(s[i-1]=='1') a=1; else a=0;

                     if(s[i+1]=='1') b=1; else b=0;

              }

       }

       if(k)

       printf("结果%d\n",a&&b);

}

非!

void fei(char s[]){

       int a=0,k=0;

       for(int i=0;i<strlen(s);i++)

       {

              if(s[i]=='!'){

                     k=1;

                     if(s[i+1]=='1') a=1; else a=0;

              }

       }

       if(k)

       printf("结果%d\n",!a);

}

不可兼或

void bkjh(char s[]){

       int a=0,b=0,k=0;

       for(int i=0;i<strlen(s);i++)

       {

              if(s[i]=='/'){

                     k=1;

                     if(s[i-1]=='1') a=1; else a=0;

                     if(s[i+1]=='1') b=1; else      b=0;

              }

       }

       if(k)

       printf("结果%d\n",a!=b);

}

 

结尾,有需要修改的还请提出意见,学习进步!

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值