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