import itertools def extract_variables(expr): """ 从表达式中提取所有逻辑变量 """ variables = set() for char in expr: if char.islower(): variables.add(char) return sorted(list(variables)) def evaluate(expr, variables): """ 计算表达式的值 """ expr = expr.replace('(', '').replace(')', '') for variable in variables: expr = expr.replace(variable, str(int(variable in variables))) return eval(expr) def main(): while True: try: expr = input().strip() except: break # 提取所有逻辑变量 variables = extract_variables(expr) # 输出表头 headers = variables + [expr] print(' '.join(headers)) # 输出逻辑变量值的所有组合情况 for combination in itertools.product([0, 1], repeat=len(variables)): values = dict(zip(variables, combination)) result = evaluate(expr, values) row = combination + (result,) print(' '.join([str(value) for value in row])) if __name__ == '__main__': main()
时间: 2024-02-14 10:12:31 浏览: 80
这是一个Python代码,用于计算逻辑表达式的真值表。下面是该代码的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_EXPR_LEN 100
char *extract_variables(char *expr) {
/* 从表达式中提取所有逻辑变量 */
char *variables = (char *)malloc(sizeof(char) * 26);
int i, j, len;
len = strlen(expr);
j = 0;
for (i = 0; i < len; i++) {
if (expr[i] >= 'a' && expr[i] <= 'z') {
variables[j++] = expr[i];
}
}
variables[j] = '\0';
return variables;
}
int evaluate(char *expr, char *variables) {
/* 计算表达式的值 */
int i, j, len;
char var[2] = {'\0', '\0'};
char *str = (char *)malloc(sizeof(char) * MAX_EXPR_LEN);
len = strlen(expr);
for (i = 0; i < len; i++) {
if (expr[i] == '(' || expr[i] == ')') {
continue;
}
var[0] = expr[i];
if (strchr(variables, var[0])) {
strncat(str, "1", 1);
} else {
strncat(str, "0", 1);
}
}
int result = (int)strtol(str, NULL, 2);
free(str);
return result;
}
int main() {
char expr[MAX_EXPR_LEN];
while (fgets(expr, MAX_EXPR_LEN, stdin) != NULL) {
// 提取所有逻辑变量
char *variables = extract_variables(expr);
// 输出表头
printf("%s %s\n", variables, expr);
// 输出逻辑变量值的所有组合情况
int n = strlen(variables);
int m = pow(2, n);
int combination[m][n];
int i, j, k;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
combination[i][j] = (i / (int)pow(2, j)) % 2;
}
}
for (i = 0; i < m; i++) {
int values[n];
for (j = 0; j < n; j++) {
values[j] = combination[i][j];
}
int result = evaluate(expr, variables);
printf("%d", values[0]);
for (j = 1; j < n; j++) {
printf(" %d", values[j]);
}
printf(" %d\n", result);
}
free(variables);
}
return 0;
}
```
该代码与Python代码的功能相同,可以计算逻辑表达式的真值表。您可以将逻辑表达式作为程序的输入,然后程序会输出真值表。
阅读全文