目录
下载链接
链接:https://pan.baidu.com/s/1nDnISBjZjbD6Bf4qqzICsw?pwd=1234
提取码:1234
设计一个5人表决开关电路
【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。
【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。
实验用例:用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。
用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。
3人或3人以上同意(即表决为1)时,表决通过,开关亮,共列出10种3人搭配,10种3人之间的搭配为析取的关系,
【实验原理和方法】
(1)写出5人表决开关电路真值表,从真值表得出5人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。
(2)上面公式中的每一个联结词是一个开关元件,将它们定义成C语言中的函数。
(3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。
(4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。
代码实现
具体代码如下所示:(只看第一个即可)
#include <stdio.h> int main() { int vote(int a,int b,int c,int d,int e); int a,b,c,d,e; printf("请输入5个人的表决值:\n"); scanf("%d %d %d %d %d",&a,&b,&c,&d,&e); if(vote(a,b,c,d,e)) printf("表决通过了!\n"); else printf("很遗憾,表决没有被通过!"); } int vote(int a,int b,int c,int d,int e) { if(a&&b&&c||a&&b&&d||a&&b&&e||a&&c&&d||a&&c&&e||a&&d&&e||b&&c&&d||b&&c&&e||b&&d&&e||c&&d&&e) return 1; else return 0; }
#include <stdio.h> int main() { int vote(int a,int b,int c,int d,int e); int a,b,c,d,e; printf("请输入5个人的表决值:\n"); scanf("%d %d %d %d %d",&a,&b,&c,&d,&e); if(vote(a,b,c,d,e)) printf("表决通过了!\n"); else printf("很遗憾,表决没有被通过!"); } int vote(int a,int b,int c,int d,int e) { if(a&&b&&c||a&&b&&d||a&&b&&e||a&&c&&d||a&&c&&e||a&&d&&e||b&&c&&d||b&&c&&e||b&&d&&e||c&&d&&e) return 1; else return 0; }
#include <stdio.h> int main() { int vote(int a,int b,int c,int d,int e); int a,b,c,d,e; printf("请输入5个人的表决值:\n"); scanf("%d %d %d %d %d",&a,&b,&c,&d,&e); if(vote(a,b,c,d,e)) printf("表决通过了!\n"); else printf("很遗憾,表决没有被通过!"); } int vote(int a,int b,int c,int d,int e) { if(a&&b&&c||a&&b&&d||a&&b&&e||a&&c&&d||a&&c&&e||a&&d&&e||b&&c&&d||b&&c&&e||b&&d&&e||c&&d&&e) return 1; else return 0; }
确定谁是作案者
【实验目的】加深对命题逻辑推理方法的理解。
【实验内容】用命题逻辑推理的方法解决逻辑推理问题。
根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。离散指
(1)营业员A或B偷了手表;
(2)若A作案,则作案不在营业时间;
(3)若B提供的证据正确,则货柜末上锁;
(4)若B提供的证据不正确,则作案发生在营业时间;
(5)货柜上了锁。
用命题题变元表示
A:营业员A偷了手表
B:营业员B偷了手表
C:作案不在营业时间
D:B提供的证据正确
E:货柜没有上锁
(1)符号化上面的命题,将它们作为条件,营业员A偷了手表作为结论,得一个复合命题。
(2)将复合命题中要用到的联结词定义成C语言中的函数,用变量表示相应的命题变元。将复合命题写成一个函数表达式。
(3)函数表达式中的变量赋初值1。如果函数表达式的值为1,则结论有效, A偷了手表,否则是B偷了手表。
代码实现
具体代码如下所示:(只看第一个即可)
#include<stdio.h> int main() { int A,B,C,D,E; for(A=0;A<=1;A++) for(B=0;B<=1;B++) for(C=0;C<=1;C++) for(D=0;D<=1;D++) for(E=0;E<=1;E++) if((A||B)&&(!A||C)&&(!D||E)&&(D||!C)&&!E) printf("A=%d,B=%d",A,B); return 0; }
#include<stdio.h> int main() { int A,B,C,D,E; for(A=0;A<=1;A++) for(B=0;B<=1;B++) for(C=0;C<=1;C++) for(D=0;D<=1;D++) for(E=0;E<=1;E++) if((A||B)&&(!A||C)&&(!D||E)&&(D||!C)&&!E) printf("A=%d,B=%d",A,B); return 0; }
#include<stdio.h> int main() { int A,B,C,D,E; for(A=0;A<=1;A++) for(B=0;B<=1;B++) for(C=0;C<=1;C++) for(D=0;D<=1;D++) for(E=0;E<=1;E++) if((A||B)&&(!A||C)&&(!D||E)&&(D||!C)&&!E) printf("A=%d,B=%d",A,B); return 0; }
链接:https://pan.baidu.com/s/1nDnISBjZjbD6Bf4qqzICsw?pwd=1234
提取码:1234