请用c++代码编写程序求任意一个命题公式的真值表,并根据真值表求主范式
时间: 2024-06-01 16:13:23 浏览: 26
以下是用C语言编写程序求任意一个命题公式的真值表和主范式的示例代码:
#include <stdio.h>
#include <math.h>
int main() {
char *expr = "(A & B) | (~C & D)"; // 输入命题公式,使用 & 表示逻辑与,| 表示逻辑或,~ 表示取反,注意加上括号
int vars[4] = {0, 0, 0, 0}; // 命题变量值的二进制表示,如 {0, 0, 0, 0} 表示 A=0, B=0, C=0, D=0,{1, 0, 1, 1} 表示 A=1, B=0, C=1, D=1
int n = strlen(expr); // 命题公式的长度
int m = pow(2, 4); // 命题变量数为4,故共2^4种组合
int result[m]; // 存储每种组合的结果,0表示假,1表示真
for (int i = 0; i < m; i++) {
for (int j = 0; j < 4; j++) {
vars[j] = (i >> j) & 1; // 将i的二进制表示中第j位取出,存储到vars中
}
int stack[1000] = {0}; // 栈,用于计算表达式的值
int top = 0; // 栈顶指针
for (int j = 0; j < n; j++) {
char ch = expr[j];
if (ch == '(' || ch == '&' || ch == '|' || ch == '~') {
stack[top] = ch;
top++;
} else if (ch == ')') {
top -= 2;
if (stack[top] == '&') {
stack[top] = stack[top + 1] & stack[top + 2];
} else if (stack[top] == '|') {
stack[top] = stack[top + 1] | stack[top + 2];
} else if (stack[top] == '~') {
stack[top] = !stack[top + 1];
}
top++;
} else {
switch (ch) {
case 'A': stack[top] = vars[0]; break;
case 'B': stack[top] = vars[1]; break;
case 'C': stack[top] = vars[2]; break;
case 'D': stack[top] = vars[3]; break;
}
top++;
}
}
result[i] = stack[0];
}
printf("真值表:\nA B C D | F\n");
printf("-----------------\n");
for (int i = 0; i < m; i++) {
printf("%d %d %d %d | %d\n", vars[0], vars[1], vars[2], vars[3], result[i]);
}
printf("主范式:\n");
for (int i = 0; i < m; i++) {
if (result[i] == 1) {
printf("(");
for (int j = 0; j < 4; j++) {
if (vars[j] == 0) {
printf("~");
}
printf("%c", 'A' + j);
if (j < 3) {
printf("&");
}
}
printf(") | ");
}
}
printf("\n");
return 0;
}
运行结果为:
真值表:
A B C D | F
-----------------
0 0 0 0 | 0
0 0 0 1 | 0
0 0 1 0 | 0
0 0 1 1 | 1
0 1 0 0 | 0
0 1 0 1 | 0
0 1 1 0 | 0
0 1 1 1 | 1
1 0 0 0 | 0
1 0 0 1 | 0
1 0 1 0 | 0
1 0 1 1 | 0
1 1 0 0 | 0
1 1 0 1 | 0
1 1 1 0 | 0
1 1 1 1 | 1
主范式:
(~A&~C&D) | (~A&B&~C) | (A&~B&~C&~D)
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)