C语言实现逻辑联结词真值表生成和命题公式类型判断
#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;
}
原文地址: https://www.cveoy.top/t/topic/gTU 著作权归作者所有。请勿转载和采集!