1、实验一 命题逻辑公式化简【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。实验用例:用化简命题逻辑公式的方法设计一个 5 人表决开关电路,要求 3 人以上(含 3 人)同意则表决通过(表决开关亮) 。【实验原理和方法】(1)写出 5 人表决开关电路真值表,从真值表得出 5 人表决开关电路的主合取公式(或主析取公式) ,将公式化简成尽可能含五个基本联结词最少的等价公式。(2)上面公式中的每一个联结词是一个开关元件,将它们定义成 C 语言中的函数。(3)输入 5 人表决值(0 或
2、1) ,调用上面定义的函数,将 5 人表决开关电路真值表的等价公式写成一个函数表达式。(4)输出函数表达式的结果,如果是 1,则表明表决通过,否则表决不通过。参考代码:#includeint vote(int a,int b,int c,int d,int e)/五人中任取三人的不同的取法有 10 种。if( aelse return 0;void main()int a,b,c,d,e;printf(“请输入第五个人的表决值(0 或 1,空格分开):“);scanf(“%d%d%d%d%d“,if(vote(a,b,c,d,e) printf(“很好,表决通过!n“);elseprintf(
3、“遗憾,表决没有通过!n“);/注:联结词不定义成函数,否则太繁实验二 命题逻辑推理【实验目的】加深对命题逻辑推理方法的理解。【实验内容】用命题逻辑推理的方法解决逻辑推理问题。实验用例:根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。(1)营业员 A 或 B 偷了手表; (2)若 A 作案,则作案不在营业时间; (3)若 B 提供的证据正确,则货柜末上锁; (4)若 B 提供的证据不正确,则作案发生在营业时间; (5)货柜上了锁。 【实验原理和方法】(1)符号化上面的命题,将它们作为条件,营业员 A 偷了手表作为结论,得一个复合命题。(2)将复合命题中要用到的联结词定义成 C 语
4、言中的函数,用变量表示相应的命题变元。将复合命题写成一个函数表达式。(3)函数表达式中的变量赋初值 1。如果函数表达式的值为 1,则结论有效, A 偷了手表,否则是 B 偷了手表。用命题题变元表示:A:营业员 A 偷了手表B:营业员 B 偷了手表C:作案不在营业时间D:B 提供的证据正确E:货柜末上锁则上面的命题符号化为 (A|B) for(A=0;A#include #define N 13struct tree float num;struct tree *Lnode;struct tree *Rnode;* fpN;/保存结点char s2*N;/放前缀码void inite_node(
5、float f,int n)/生成叶子结点int i;struct tree *pt;for(i=0;inum=fi;pt-Lnode=NULL;pt-Rnode=NULL;fpi=pt;void sort(struct tree * array,int n)/将第 N-n 个点插入到已排好序的序列中。int i;struct tree *temp;for(i=N-n;inumarrayi+1-num)temp=arrayi+1;arrayi+1=arrayi;arrayi=temp;struct tree * construct_tree(float f,int n)/建立树int i;st
6、ruct tree *pt;for(i=1;inum=fpi-1-num+fpi-num;pt-Lnode=fpi-1;pt-Rnode=fpi;fpi=pt;/w1+w2sort(fp,N-i);return fpN-1;void preorder(struct tree *p,int k,char c) int j;if(p!=NULL) if(c=l) sk=0;else sk=1;if(p-Lnode=NULL) /P 指向叶子printf(“%.2f: “,p-num);for(j=0;jLnode,k+1,l);preorder(p-Rnode,k+1,r);void main()
7、float fN=2,3,5,7,11,13,17,19,23,29,31,37,41;struct tree *head;inite_node(f,N); /初始化结点head=construct_tree(f,N);/生成最优树s0=0;preorder(head,0,l);/遍历树实验八 群的判定【实验目的】掌握群的判定方法。【实验内容】输入代数系统(A,*)的集合 A 和*运算的运算表,判断(A,*)是否是群。【实验原理和方法】(1)用一维数组 an存贮集合 A。(2)用二维数组 opnn存贮运算表。(3)根据群的定义,代数系统(A,*)若为群,除运算表已表明运算*封闭外,还应该满足下
8、列三个条件:*运算可结合、有幺元 e、 A 中任何元素都有逆元。*运算可结合:for(i=0;iN;i+)for(j=0;jN;j+)for(k=0;kN;k+)for(l=0;lN;l+)if(opij=al) x=l;/*opij 代表 a*b*/if(opjk=al) y=l;/*opjk 代表 b*c*/if(opiy!=opxk)/*opiy代表 a*(b*c)*/printf(“(%d*%d)*%d=%d,%d*(%d*%d)=%d,运算是不可结合!n“,ai,aj,ak,opxk,ai,aj,ak,opiy);flag=0;/*不满足结合性*/if(flag) printf(“运
9、算是可结合!n“);有幺元 e:flag=0;for(i=0;iN;i+)for(j=0;jN;j+)if(opij!=aj | opji!=aj) break;if(j=N) printf(“群有幺元%d!n“,ai); e=ai;flag=1; break;if(!flag) printf(“群没有幺元!n“);A 中任何元素都有逆元:flag=1;for(i=0;iN;i+)for(j=0;jN;j+)if(opij=e /*e 是幺元*/if(j=N) flag=0;printf(“A 中元素%d 没有逆元!n“,aj);if(flag) printf(“A 中任何元素都有逆元!n“);