#include <stdio.h>

// 定义常量 #define TRUE 1 #define FALSE 0

// 定义逻辑联结词的函数 int conjunction(int p, int q) { return p && q; }

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

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

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

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

// 打印真值表 void printTruthTable(int (func)(int, int), int values) { printf("P Q R Result\n"); for (int i = 0; i < 8; i++) { int p = values[i] & 4 ? TRUE : FALSE; int q = values[i] & 2 ? TRUE : FALSE; int r = values[i] & 1 ? TRUE : FALSE;

    int result = func(p, q);
    printf("%d	%d	%d	%d\n", p, q, r, result);
}

}

// 判断命题公式类型 void checkFormulaType(int (func)(int, int), int values) { int isTautology = TRUE; int isContradiction = TRUE;

for (int i = 0; i < 8; i++) {
    int p = values[i] & 4 ? TRUE : FALSE;
    int q = values[i] & 2 ? TRUE : FALSE;
    int r = values[i] & 1 ? TRUE : FALSE;

    int result = func(p, q);
    if (!result) {
        isTautology = FALSE;
    }
    if (result) {
        isContradiction = FALSE;
    }
}

if (isTautology) {
    printf("The formula is a tautology.\n");
} else if (isContradiction) {
    printf("The formula is a contradiction.\n");
} else {
    printf("The formula is satisfiable.\n");
}

}

int main() { int values[8] = {0, 1, 0, 1, 0, 1, 0, 1};

int choice;
do {
    printf("1. Conjunction\n");
    printf("2. Disjunction\n");
    printf("3. Exclusive Or\n");
    printf("4. Conditional\n");
    printf("5. Biconditional\n");
    printf("6. Exit\n");
    printf("Enter your choice: ");
    scanf("%d", &choice);

    int (*func)(int, int);
    switch (choice) {
        case 1:
            func = conjunction;
            break;
        case 2:
            func = disjunction;
            break;
        case 3:
            func = exclusive_or;
            break;
        case 4:
            func = conditional;
            break;
        case 5:
            func = biconditional;
            break;
        case 6:
            return 0;
        default:
            printf("Invalid choice. Please try again.\n");
            continue;
    }

    printTruthTable(func, values);
    checkFormulaType(func, values);
} while (1);

return 0;

}

C语言实现逻辑联结词真值表及公式类型判断

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

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