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