C语言---离散数学实验--命题逻辑及其应用(实验报告下载)

目录

下载链接

设计一个5人表决开关电路

代码实现 

确定谁是作案者

代码实现 


下载链接

链接: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 
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 
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 
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
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
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
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

你可能感兴趣的:(简单实验,c语言,数据结构)