#include <stdio.h>

// 定义逻辑联结词的枚举类型
typedef enum {AND, OR, NOT, IMPLY, EQUIV} Connective;

// 定义命题变元的枚举类型
typedef enum {P, Q, R} Proposition;

// 定义命题公式的结构体
typedef struct {
    Connective connective; // 逻辑联结词
    Proposition p; // 命题变元1
    Proposition q; // 命题变元2
    Proposition r; // 命题变元3
} PropositionalFormula;

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

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

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

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

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

// 定义命题公式的真值表函数
void truth_table(PropositionalFormula formula) {
    int p, q, r;
    printf("P\tQ\tR\tResult\n");
    for (p = 0; p <= 1; p++) {
        for (q = 0; q <= 1; q++) {
            for (r = 0; r <= 1; r++) {
                int result;
                switch (formula.connective) {
                    case AND:
                        result = and_func(p, q);
                        break;
                    case OR:
                        result = or_func(p, q);
                        break;
                    case NOT:
                        result = not_func(p);
                        break;
                    case IMPLY:
                        result = imply_func(p, q);
                        break;
                    case EQUIV:
                        result = equiv_func(p, q);
                        break;
                }
                // 输出真值表
                printf("%d\t%d\t%d\t%d\n", p, q, r, result);
            }
        }
    }
}

// 判断命题公式的类型函数
void determine_formula_type(PropositionalFormula formula) {
    switch (formula.connective) {
        case AND:
            printf("The formula is a conjunction.\n");
            break;
        case OR:
            printf("The formula is a disjunction.\n");
            break;
        case NOT:
            printf("The formula is a negation.\n");
            break;
        case IMPLY:
            printf("The formula is an implication.\n");
            break;
        case EQUIV:
            printf("The formula is an equivalence.\n");
            break;
    }
}

int main() {
    // 创建命题公式
    PropositionalFormula formula;
    formula.connective = AND;
    formula.p = P;
    formula.q = Q;
    formula.r = R;
    
    // 输出命题公式的真值表
    truth_table(formula);
    
    // 判断命题公式的类型
    determine_formula_type(formula);
    
    return 0;
}
C语言实现命题逻辑:逻辑联结词、真值表与公式类型判断

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

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