实现五个常用的逻辑联结词的基本功能,通过程序调用,完成至少3个命题变元的命题公式真值表的设计;并给出两个命题公式,判断它们是否等价。上传程序代码。最好明天中午之前
#include<stdio.h>
int No(int p)
{
return !p;
}
//p->q
int Condition(int p, int q)
{
if (p == 1 && q == 0)
return 0;
else
return 1;
}
//p<->q
int TowCondition(int p, int q)
{
if (p == q)
return 1;
else
return 0;
}
//p^q
int Conjunction(int p,int q)
{
return p && q;
}
//p v q
int Disjunction(int p, int q)
{
return p || q;
}
//等值判断 也可以用上面的函数 TowCondition 去判断
int Same(int p, int q)
{
if (p == q)
return 1;
else
return 0;
}
int TrueTable(int num)
{
//对应真值表
int r = num % 2;
num /= 2;
int q = num % 2;
num /= 2;
int p = num % 2;
printf("%-6d\t", p);
printf("%-6d\t", q);
printf("%-6d\t", r);
//"7p", "p->q", "p<->q", "p^q", "pvq", "pvq->r", "7p^pvr"
//非 "7p"
int a = No(p);
printf("%-6d\t", a);
//条件 "p->q"
int b = Condition(p, q);
printf("%-6d\t", b);
//双条件 "p<->q"
int c = TowCondition(p,q);
printf("%-6d\t", c);
//合取 "p^q"
int d = Conjunction(p, q);
printf("%-6d\t", d);
//析取 "pvq"
int e = Disjunction(p, q);
printf("%-6d\t", e);
//"pvq -> r" pvq-e
b = Condition(e, r);
printf("%-6d\t", b);
// pvr - e
e = Disjunction(p, r);
// "7p ^ pvr" a - 7p
d = Conjunction(a, e);
printf("%-6d\t", d);
//等值结果 b:pvq -> r d:7p ^ pvr
int g = Same(b, d);
//printf("%-6d\t", g);
printf("\n");
if (g == 1)
{
return 1;
}
else
return 0;
}
int main()
{
printf("%-6c\t%-6c\t%-6c\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t%-6s\t", 'p',
'q', 'r', "7p", "p->q", "p<->q", "p^q", "pvq", "pvq->r","7p^pvr");
printf("\n");
int i = 0;
int ret = 0;
int sum = 0;
for (i = 0; i < 8; i++)
{
ret = TrueTable(i);
sum += ret;
}
if (sum == 8)
printf("等价");
else
printf("不等价");
return 0;
}
看不懂啊。五个常用的逻辑联结词 是什么
我的意思是说用C语言写出图中真值表并且判断后面的公式是否等价,麻烦了各位
1.非P简单,就是P取反嘛,如果p是bool类型那么p=!p;如果p是int类型那么P=1-P
2.析取就是与,p && q
3.合取就是或,p || q
4.等价就是p==q,但是感觉你图里的答案好像不对,怎么p<->q和p^q的结果相同呢
5.条件公式是什么?