#include <stdio.h>

// 逻辑联结词的基本功能函数 int conjunction(int p, int q) { return p && q; }

int disjunction(int p, int q) { return p || q; }

int negation(int p) { return !p; }

int implication(int p, int q) { return !p || q; }

int equivalence(int p, int q) { return p == q; }

// 打印真值表 void printTruthTable(int *p, int *q, int *r, int n, int (*func)(int, int)) { printf("P Q R Result\n"); for (int i = 0; i < n; i++) { printf("%d %d %d %d\n", p[i], q[i], r[i], func(p[i], q[i])); } }

// 判断命题公式类型 void checkFormula(int *p, int *q, int *r, int n, int (*func)(int, int)) { int result = func(p[0], q[0]); for (int i = 1; i < n; i++) { if (func(p[i], q[i]) != result) { printf("可满足式\n"); return; } } if (result) { printf("永真式\n"); } else { printf("不可满足式\n"); } }

int main() { int p[12] = {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0}; int q[12] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0}; int r[12] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1}; int choice;

do {
    printf("请选择逻辑联结词:\n");
    printf("1. 与\n");
    printf("2. 或\n");
    printf("3. 非\n");
    printf("4. 蕴含\n");
    printf("5. 等价\n");
    printf("0. 退出\n");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("真值表:\n");
            printTruthTable(p, q, r, 12, conjunction);
            printf("命题公式类型:");
            checkFormula(p, q, r, 12, conjunction);
            break;
        case 2:
            printf("真值表:\n");
            printTruthTable(p, q, r, 12, disjunction);
            printf("命题公式类型:");
            checkFormula(p, q, r, 12, disjunction);
            break;
        case 3:
            printf("真值表:\n");
            printTruthTable(p, q, r, 12, negation);
            printf("命题公式类型:");
            checkFormula(p, q, r, 12, negation);
            break;
        case 4:
            printf("真值表:\n");
            printTruthTable(p, q, r, 12, implication);
            printf("命题公式类型:");
            checkFormula(p, q, r, 12, implication);
            break;
        case 5:
            printf("真值表:\n");
            printTruthTable(p, q, r, 12, equivalence);
            printf("命题公式类型:");
            checkFormula(p, q, r, 12, equivalence);
            break;
        case 0:
            printf("程序已退出\n");
            break;
        default:
            printf("无效的选择\n");
            break;
    }
} while (choice != 0);

return 0;

}

C语言实现逻辑联结词真值表生成和命题公式类型判断

原文地址: https://www.cveoy.top/t/topic/gTU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录