根据输入的编码及变元个数,输出其主析取范式和主合取范式的二进制编码形式及公式形式。用c语言编写,其中的编码为2和3
时间: 2024-05-25 08:18:43 浏览: 86
#include <stdio.h>
void main()
{
int code, n;
printf("请输入编码:");
scanf("%d", &code);
printf("请输入变元个数:");
scanf("%d", &n);
int i, j, k, count, flag;
int binary[n];
for(i=0; i<n; i++)
{
binary[i] = (code>>i) & 1;
}
//求主析取范式
for(i=0; i<(1<<n); i++)
{
count = 0;
flag = 1;
for(j=0; j<n; j++)
{
if(binary[j] == 1 && ((i>>j) & 1) == 0)
{
flag = 0;
break;
}
if(binary[j] == 0 && ((i>>j) & 1) == 1)
{
flag = 0;
break;
}
if(binary[j] == 1 && ((i>>j) & 1) == 1)
{
count++;
}
}
if(flag == 1)
{
printf("(");
for(k=0; k<n; k++)
{
if((i>>k) & 1)
{
printf("x%d&", k+1);
}
else
{
printf("~x%d&", k+1);
}
}
printf(")v");
}
}
printf("\n");
//求主合取范式
for(i=0; i<(1<<n); i++)
{
count = 0;
flag = 1;
for(j=0; j<n; j++)
{
if(binary[j] == 1 && ((i>>j) & 1) == 0)
{
flag = 0;
break;
}
if(binary[j] == 0 && ((i>>j) & 1) == 1)
{
flag = 0;
break;
}
if(binary[j] == 0 && ((i>>j) & 1) == 0)
{
count++;
}
}
if(flag == 1)
{
printf("(");
for(k=0; k<n; k++)
{
if((i>>k) & 1)
{
printf("~x%dv", k+1);
}
else
{
printf("x%dv", k+1);
}
}
printf(")&");
}
}
printf("\n");
}
阅读全文