
用C或者C++做一个布尔函数的输出系统。
用C或者C++做一个布尔函数的输出系统。已知布尔函数的变量的个数,以及布尔函数的整个真值表,输出布尔函数的表达式。...
用C或者C++做一个布尔函数的输出系统。已知布尔函数的变量的个数,以及布尔函数的整个真值表,输出布尔函数的表达式。
展开
1个回答
展开全部
该系统是输入布尔函数的表达式,然后输出表达式的真值吗?
更多追问追答
追问
是自己确定一个真值表,然后输出他的表达式
设布尔函数的真值表为:
x1 x2 f(x1,x2)
0 0 1
0 1 1
1 0 1
1 1 0
输出的表达式为:f(x1,x2)=1+x1*x2
追答
哦,就是输出一个表达式啊,那么多次遍历输出即可。思路:输出所有真值为1的项相加,每项中变量相乘,如果变量为假则取非
const int paramCnt = 4; // 即变量数,也可以动态变动的变量数
// 做一个变量表
char paramList[paramCnt];
for (int i = 0; i < paramCnt; i++)
{
scanf("%c", ¶mList[i]);
}
// 读取生成真值表
int max_size = 1; // 真值表个数
for (int i = 0; i < paramCnt; i++)
{
max_size *= 2;
}
printf("真值表共有%d个值,请依次输入变量值及真值.\n", max_size);
int a[max_size][paramCnt + 1];
for (int i = 0; i < max_size; i ++)
{
printf("开始第%d项的真值表达式", i + 1);
for (int j = 0; j <= paramCnt; j++)
{
if (j < paramCnt) printf("输入变量%c的值:", paramList[j]);
else printf("输入该项的真值:");
scanf("%d", &a[i][j]); // 这里没有做输入校验,自己添加\输入只能0、1
}
}
// 输出表达式
printf("表达式*表示与,+表示或,!表示非:\n");
int flag = 0; // 用来标识是否打出了开头
for (int i = 0; i < max_size; i ++)
{
if (a[i][paramCnt] == 1) // 如果上面不是用0、1表示、而是true\false,则自己替换
{
if (flag != 0) printf(" + ");
flag = 0; // 重置用于判断是否需要在变量前输出*
for (int j = 0; j < paramCnt; j++)
{
if (flag != 0) printf(" * ");
if (a[i][j] == 1) printf("%c", paramList[j]);
else printf("!%c", paramList[j]);
}
flag = 1; // 重置下一项输入需要输出+
}
}
printf("\n");
没有编译器验证,如有语法问题,自己调整
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询