该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码如下(是一个输出范式真值表的程序)
#include
#include
#include
#include
int suan(int a,int b,char *ch_p,int*num);
void main()
{
char *ch;
int n=0,i=0,j=0,k=0,*num,cpy[2][52],h1,h2=0,h3;
printf("不识别下角标和括号,最多支持52个命题变量,合取、析取、非用*、+、!表示\n");
printf("输入表达式:");
scanf("%s",&ch);
printf("\n计算中...\n");
while(ch[i]!='\0')
{
if('A'<=ch[i]&&ch[i]<='z')
n++;
i++;
}
num=(int*)malloc(n*sizeof(int));
for(i=0;ch[i]!='\0';i++)
{
if('A'<=ch[i]&&ch[i]<='z')
{
k++;
if(i=0)
printf("%c\t",ch[i]);
else
{
h1=0;
for(j=0;j
{
if('A'<=ch[j]&&ch[i]<='z')
h1++;
if(ch[i]==ch[j])
{
cpy[0][h2]=h1;cpy[1][h2]=k;
h2++;
break;
}
else
if(j=0)
printf("%c\t",ch[i]);
}
}
}
}
printf("%s\n",ch);
for(i=0;i<=n-1;i++)
{
for(j=0;j=n-1;j++)
{
num[n-1-j]=i%2;
i=i/2;
}
j=0;k=0;h1=0;h3=0;
while(ch[j]!='\0')
{
while(ch[j]!='+'&&ch[j]!='\0')
{
k++;
j++;
}
h2=suan(h1,k-1,ch,num);
h3=h3+h2;
if(h3>1)
h3=1;
h1=k;
}
k=0;
for(j=0;j<52;j++)
{
if(num[cpy[0][j]-1]==num[cpy[1][j]-1])
k++;
}
if(k==0)
{
for(j=0;j
for(h1=0;h1<52;h1++)
{
if(j!=cpy[1][h1]-1)
printf("%d\t",num[j]);
}
printf("\n");
}
}
}
int suan(int a,int b,char *ch_p,int *num)
{
int t1,t2,k1=0;
t1=num[0];
for(t2=a;t2<=b;t2++)
{
if('A'<=ch_p[t2]&&ch_p[t2]<='z')
k1++;
if(ch_p[t2]=='!')
{
if(num[k1-1]==0)
num[k1-1]=1;
num[k1-1]=0;
}
if(ch_p[t2]=='*')
t1=t1*num[k1];
}
return t1;
}