第3关:命题逻辑推理
任务描述
相关知识
实验用例
实验原理和方法
编程要求
测试说明
任务描述
本关任务:用命题逻辑推理的方法解决逻辑推理问题。加深对命题逻辑推理方法的理解。
相关知识
为了完成本关任务,你需要掌握:1.命题符号化,2.命题推理。
实验用例
根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
(1)营业员A或B偷了手表;
(2)若A作案,则作案不在营业时间;
(3)若B提供的证据正确,则货柜未上锁;
(4)若B提供的证据不正确,则作案发生在营业时间;
(5)货柜上了锁。
实验原理和方法
1、符号化上面的命题,将它们作为条件,得一个复合命题。
定义命题变元如下:
p: 营业员A偷了手表 q: 营业员B偷了手表
r: 作案在营业时间 s: B提供的证据正确
t: 货柜上锁
则条件符号化为:
(1)p∨q
(2)(略,自行补充)
(3)(略,自行补充)
(4)(略,自行补充)
(5)(略,自行补充)
2、将复合命题中要用到的联结词定义为C语言中的逻辑运算,用变量表示相应的命题变元。将复合命题写成一个逻辑表达式。
例如 p∨q 对应C语言中的p∣∣q。
3、编写程序利用穷举法找出pqrst的一组赋值使得逻辑表达式成立。若p=1则表示A作案,q=1则表示B作案。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出p、q、r、s、t的值。例如,10111
测试说明
平台会对你编写的代码进行测试:
开始你的任务吧,祝你成功!
/*
* step3.c
*
利用命题逻辑求解实际问题
*
*/
//p∨q p->!r s->!t !s->r t
//p||q p==!r||!r=0 s==!t||!t=0 !s==r||r=0 t
//p||q&&p&&!r&&s&&t&&!s&&r&&t
//01101
#include <stdio.h>
int main(int argc, char **argv)
{
int p,q,r,s,t;
//在下面Begin和End之间补全代码
/*********** Begin ***********/
for(p=0;p<2;p++)
for(q=0;q<2;q++)
for(r=0;r<2;r++)
for(s=0;s<2;s++)
for(t=0;t<2;t++)
{
if((p||q)&&(!p&&r)&&(!s&&t)&&(!s&&r)&&t)
{
printf("%d%d%d%d%d",p,q,r,s,t);
}
}
/*********** end ***********/
return 0;
}