c++写一段程序,测试p和q两个逻辑表达式是否逻辑相等 用真值表判断 输入的逻辑表达式为命题逻辑表达式 输入的逻辑表达式可以为复合命题,可包含四种联接词:与,或,非,条件
时间: 2023-06-05 21:07:16 浏览: 69
如下是一个简单的程序示例:
#include <stdio.h>
int main() {
// 输入 p 和 q 两个逻辑表达式
char p[100], q[100];
printf("Enter the first expression p: ");
scanf("%s", p);
printf("Enter the second expression q: ");
scanf("%s", q);
// 构建真值表
int values[16][2];
for (int i = 0; i < 16; i++) {
int p_val = (i >> 3) & 1;
int q_val = (i >> 2) & 1;
int and_val = (p_val & q_val);
int or_val = (p_val | q_val);
int not_p_val = (!p_val);
int not_q_val = (!q_val);
int imp_val = (!p_val) | q_val;
values[i][0] = and_val;
values[i][1] = or_val;
values[i][2] = not_p_val;
values[i][3] = not_q_val;
values[i][4] = imp_val;
}
// 求出两个逻辑表达式的真值
int p_val = 0, q_val = 0;
for (int i = 0; i < 16; i++) {
if (!strcmp(p, "p")) {
p_val = values[i][0];
} else if (!strcmp(p, "q")) {
p_val = values[i][1];
} else if (!strcmp(p, "~p")) {
p_val = values[i][2];
} else if (!strcmp(p, "~q")) {
p_val = values[i][3];
} else if (!strcmp(p, "p->q")) {
p_val = values[i][4];
} else {
printf("Invalid expression: %s", p);
return 1;
}
if (!strcmp(q, "p")) {
q_val = values[i][0];
} else if (!strcmp(q, "q")) {
q_val = values[i][1];
} else if (!strcmp(q, "~p")) {
q_val = values[i][2];
} else if (!strcmp(q, "~q")) {
q_val = values[i][3];
} else if (!strcmp(q, "p->q")) {
q_val = values[i][4];
} else {
printf("Invalid expression: %s", q);
return 1;
}
// 判断两个逻辑表达式是否逻辑相等
if (p_val != q_val) {
printf("The expressions are not equivalent");
return 0;
}
}
printf("The expressions are equivalent!");
return 0;
}
请注意,这只是一个示例程序,可能存在一些漏洞和限制。在实际使用中,应该考虑更多的特殊情况,并进行充分测试。