用C或者C++做一个布尔函数的输出系统。

用C或者C++做一个布尔函数的输出系统。已知布尔函数的变量的个数,以及布尔函数的整个真值表,输出布尔函数的表达式。... 用C或者C++做一个布尔函数的输出系统。已知布尔函数的变量的个数,以及布尔函数的整个真值表,输出布尔函数的表达式。 展开
 我来答
猫鼠猫M
2012-12-02 · TA获得超过771个赞
知道小有建树答主
回答量:726
采纳率:50%
帮助的人:963万
展开全部
该系统是输入布尔函数的表达式,然后输出表达式的真值吗?
更多追问追答
追问
是自己确定一个真值表,然后输出他的表达式
设布尔函数的真值表为:
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");

没有编译器验证,如有语法问题,自己调整
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式