求大神帮忙编一个C++程序。本人菜鸟。。要求如图。输入变量个数,名称,逻辑;输出true table.

还有一题
2025-01-01 13:15:29
推荐回答(2个)
回答1:

思路如下,代码如下未调试。
输入参与运算的变量单字母存入var数组;
依次输入变量的值存入val数组;
输入表达式字符串到exp,长度为elen。
先将变量的值val[i]统一为0(F),1(T);
先使用每个变量字符var[i],将表达式中出现的var[i]替换为val[i];
自此,表达式由于操作符+*%^>和取反符~以及0,1组成。
按照从左到右进行计算。
多个~后面跟数字,如果个数为奇,则对数字取反,
这样简化为 0,1参与的从左到右的系列二元操作op表达式:r op a op b op c..
[r*b]表示c语言r= r&b;
[r+b ]表示c语言r= r|b;
[r % b] 表示c语言 异或r= r^b;
[r>n]表示c语言 if(r)if(!b)r=0;
[r^b] 表示 if (r==b) r=1 else r=0.
main()
{

int num,elen;

char exp[100];
char val[10];
char var[10];
char ac;
char d,notr;
int i,j;
scanf("%d",&num);
for(i=0;i
{
scanf('%c ',var+i);
}
scanf("%s",exp);
elen=strlen(exp);
for(i=0;i{
val[i]=0;
scanf("%c ",&ac);
if(ac=='T')val[i]=1;
}
for(j=0;j
for(i=0;i{
if(exp[j]=var[i])exp[j]=val[i];
}

int ax=-1;
notr=0;
j=0;

for(;j{
if(exp[i]==[~])notr ^=1;
else break;
}
ax= notr ^exp[j];
notr=0;
op=exp[++j];
j++;
while(j+1{
while(j+1{
if(exp[j]=='~')notr^=1;else break;
j++;
}

if(exp[j]<2)
{
d = notr ^exp[j];
notr =0;
switch(op)
{
case '*':

ax &= d;
break;
case '+':
ax |= d;
break;
case '%':
ax^=d;
break;
case '>':
if(ax)if(!d)ax=0;
break;
case '^':
ax ^= d;
break;
}
op=exp[j+1];
}

最终‘累加器’变量ax的值就表达式Exp的值。
}

回答2:

图片不清楚,没看明白