admin 管理员组

文章数量: 1086019


2024年4月21日发(作者:两个bigdecimal比较)

实验一

命题逻辑公式化简

【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌

握利用基本等价公式化简公式的方法。

【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。

实验用例: 用化简命题逻辑公式的方法设计一个 5 人表决开关电路, 要求 3 人以上 (含

3 人)同意则表决通过(表决开关亮) 。

【实验原理和方法】

(1) 写出 5 人表决开关电路真值表, 从真值表得出 5 人表决开关电路的主合取公式 (或

主析取公式) ,将公式化简成尽可能含五个基本联结词最少的等价公式。

(2)上面公式中的每一个联结词是一个开关元件,将它们定义成 C 语言中的函数。

(3)输入 5 人表决值(0 或 1),调用上面定义的函数,将 5 人表决开关电路真值表的

等价公式写成一个函数表达式。

(4)输出函数表达式的结果,如果是 1 ,则表明表决通过,否则表决不通过。

参考代码:

#include

int vote(int a,int b,int c,int d,int e)

{

//五人中任取三人的不同的取法有 10 种。

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;

}

void main()

{

int a,b,c,d,e;

printf("请输入第五个人的表决值( 0 或 1, 空格分开): ");

scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);

if(vote(a,b,c,d,e))

printf("很好,表决通过! n");

else

printf("遗憾,表决没有通过! n");

}

//注:联结词不定义成函数,否则太繁

实验二 命题逻辑推理

【实验目的】加深对命题逻辑推理方法的理解。

【实验内容】用命题逻辑推理的方法解决逻辑推理问题。

实验用例:根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。

(1) 营业员A 或 B 偷了手表;

(2) 若 A 作案,则作案不在营业时间;

(3) 若 B 提供的证据正确,则货柜末上锁;

(4) 若 B 提供的证据不正确,则作案发生在营业时间;

(5)货柜上了锁。

【实验原理和方法】

(1)符号化上面的命题,将它们作为条件,营业员 A 偷了手表作为结论,得一个复合

命题。

(2)将复合命题中要用到的联结词定义成 C 语言中的函数,用变量表示相应的命题变

元。将复合命题写成一个函数表达式。

(3)函数表达式中的变量赋初值 1。如果函数表达式的值为 1,则结论有效, A 偷了

手表,否则是 B 偷了手表。

用命题题变元表示:

A:营业员A 偷了手表

B:营业员 B 偷了手表

C:作案不在营业时间

D:B 提供的证据正确

E:货柜末上锁

则上面的命题符号化为 (A| |B) && (!A| |C) && (!D| |E) && (D| | !C) && !E

要求找到满足上面式子的变元 A, B 的指派便是结果。

C 语言算法:

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=%dn",A,B);

}

/*实验结果是: A=0, B=1,即 B 偷了手表*/


本文标签: 命题 方法 函数 表决 公式