易笠筠 2022-09-26 09:34 采纳率: 33.3%
浏览 251
已结题

纯C语言设计离散数学的真值表和判断是否等价

实现五个常用的逻辑联结词的基本功能,通过程序调用,完成至少3个命题变元的命题公式真值表的设计;并给出两个命题公式,判断它们是否等价。上传程序代码。最好明天中午之前

img

  • 写回答

5条回答 默认 最新

  • 日向晚,声声慢 2022-09-26 13:07
    关注
    #include<stdio.h>
    
    int No(int p)
    {
        return !p;
    }
    
    //p->q
    int Condition(int p, int q)
    {
        if (p == 1 && q == 0)
            return 0;
        else
            return 1;
    }
    
    //p<->q
    int TowCondition(int p, int q)
    {
        if (p == q)
            return 1;
        else
            return 0;
    }
    
    //p^q
    int Conjunction(int p,int  q)
    {
        return p && q;
    }
    
    //p v q
    int Disjunction(int p, int  q)
    {
        return p || q;
    }
    
    
    //等值判断 也可以用上面的函数 TowCondition 去判断
    int Same(int p, int q)
    {
        if (p == q)
            return 1;
        else
            return 0;
    }
    int TrueTable(int num)
    {
        //对应真值表
        int r = num % 2; 
        num /= 2;
        int q = num % 2;
        num /= 2;
        int p = num % 2;
        printf("%-6d\t", p);
        printf("%-6d\t", q);
        printf("%-6d\t", r);
    
        //"7p", "p->q", "p<->q", "p^q", "pvq", "pvq->r", "7p^pvr"
        //非  "7p" 
        int a = No(p);
        printf("%-6d\t", a);
    
        //条件  "p->q"
        int b = Condition(p, q);
        printf("%-6d\t", b);
    
        //双条件 "p<->q"
        int c = TowCondition(p,q);
        printf("%-6d\t", c);
    
        //合取 "p^q"
         int d = Conjunction(p, q);
         printf("%-6d\t", d);
    
        //析取 "pvq"
        int e = Disjunction(p, q);
        printf("%-6d\t", e);
    
        //"pvq -> r"   pvq-e
        b = Condition(e, r);
        printf("%-6d\t", b);
    
        
        //  pvr - e
        e = Disjunction(p, r);
    
        // "7p ^ pvr"  a - 7p
        d = Conjunction(a, e);
        printf("%-6d\t", d);
    
        //等值结果 b:pvq -> r   d:7p ^ pvr
        int g = Same(b, d);
        //printf("%-6d\t", g);
        printf("\n");
        if (g == 1)
        {
            return 1;
        }
        else
            return 0;
    
    }
    
    int main()
    {
        printf("%-6c\t%-6c\t%-6c\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t", 'p',
            'q', 'r', "7p", "p->q", "p<->q", "p^q", "pvq", "pvq->r","7p^pvr");
        printf("\n");
        int i = 0;
        int ret = 0;
        int sum = 0;
        for (i = 0; i < 8; i++)
        {
            ret = TrueTable(i);
            sum += ret;
        }
        if (sum == 8)
            printf("等价");
        else
            printf("不等价");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 10月4日
  • 已采纳回答 9月26日
  • 创建了问题 9月26日

悬赏问题

  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?