《离散数学》实验报告专业软件工程班级163班姓名周掌珍学号169074261授课教师杨思春二O一七年六月目录实验一联结词的运算实验二集合的运算实验三二元关系的性质判定实验四图的矩阵运算《离散数学》实验报告1实验一联结词的运算一.实验目的通过上机实验操作,将命题连接词运算融入到C语言的程序编写中,一方面加强对命题连接词运算的理解,另一方面通过编程实现命题连接词运算,帮助学生复习和锻炼C语言知识,将理论知识与实际操作结合,让学生更加容易理解和记忆命题连接词运算。二.实验原理(1)非运算,符号:,当P=T时,P为F,当P=F时,P为T。(2)合取,符号:∧,当且仅当P和Q的真值同为真,命题P∧Q的真值才为真;否则,P∧Q的真值为假。(3)析取,符号:∨,当且仅当P和Q的真值同为假,命题P∨Q的真值才为假;否则,P∨Q的真值为真。(4)异或,符号:▽,当且仅当P和Q的真值不同时,命题P▽Q的真值才为真;否则,P▽Q的真值为真。(5)蕴涵,符号:→,当且仅当P为T,Q为F时,命题P→Q的真值才为假;否则,P→Q的真值为真。(6)等价,符号:↔,当且仅当P,Q的真值不同时,命题P↔Q的真值才为假;否则,P→Q的真值为真。三.实验内容编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。四.算法程序内容格式:新罗马,小五号,行间距固定值18磅#includestdio.hintmain(){charm;intP,Q;printf(请输入P,Q的真值与逻辑连接词:(P逻辑联结Q)\na:与\tb:或\tc(请先输入0):非\td:蕴含\te:等价《离散数学》实验报告2\tf:异或\n);scanf(%d%c%d,&P,&m,&Q);switch(m){case'a':if(P==1&&Q==1)printf(P与Q=1\n);elseprintf(p合取Q=0\n);break;case'b':if(P==0&&Q==0)printf(P或Q=0\n);elseprintf(P或Q=1\n);break;case'c':if(P==1)printf(非P=0\n);elseprintf(非P=1\n);break;case'd':if(P==1&&Q==0)printf(P蕴含Q=0\n);elseprintf(P蕴含Q=1\n);break;case'e':if(P==Q)printf(P等价Q=1\n);elseprintf(P等价Q=0\n);break;case'f':if(P==Q)printf(P异或Q=0\n);elseprintf(P异或Q=1\n);break;}《离散数学》实验报告3五.实验结果实验结果截图大小为:宽(10cm)×高(8cm)六.心得体会内容格式:宋体,五号,行间距固定值18磅实验二集合的运算一.实验目的集合运算主要包括并运算,交运算,相对差,对称差运算,集合论的语言适合于描述和研究离散对象及其关系,所以也是计算机科学与工程的理论基础,在程序设计、关系数据库、排队论、开关理论,形式语言和自动机理论等学科领域中都有重要的应用。集合运算是学习集合论的基础,通过编程实现集合的相关运算,帮助同学们学好集合论相关知识打下基础。二.实验原理交运算:任何二个集合A和B的交集A∩B是由A和B所共有的全部元素构成的集合,《离散数学》实验报告4即:A∩B={x|xA∧xB}并运算:A、B是任意二个集合,A和B的并集A∪B是由A和B的所有元素构成的集合。即:A∪B={x│xA∨xB}相对差:设A和B是二个任意集合,B对A的相对差(A-B)是由属于A且不属于B的所有元素组成的集合。即:A-B={x│xA∧xB}={x│xA∧xB}对称差:设A、B是任意二集合,A和B的环和记作A⊕B。即:A⊕B=(A-B)∪(B-A)=(A∩~B)∪(B∩~A)或者x(A⊕B)x{x|xAxB}三.实验内容深入理解集合的四种基本运算,根据每个运算定义,编程实现各个运算。四.算法程序内容格式:新罗马,小五号,行间距固定值18磅交集运算:#includestdio.hintmain(){inta[10],b[10],c[20],i,m,n,j,k=0;printf(请输入集合A,集合B中的元素个数:\n);scanf(%d%d,&m,&n);printf(请输入集合A的元素:\n);for(i=0;im;i++)scanf(%d,&a[i]);printf(请输入集合B的元素:\n);for(i=0;in;i++)scanf(%d,&b[i]);printf(A={);《离散数学》实验报告5for(i=0;im;i++)printf(%d,,a[i]);putchar('\b');printf(}\n);printf(B={);for(i=0;in;i++)printf(%d,,b[i]);putchar('\b');printf(}\n);for(i=0;im;i++)for(j=0;jn;j++)if(a[i]==b[j])c[k++]=a[i];printf(A∩B={);for(i=0;ik;i++)printf(%d,,c[i]);putchar('\b');printf(}\n);}并集运算:#includestdio.h《离散数学》实验报告6intmain(){inta[10],b[10],c[20],i,m,n,j,k=0;printf(请输入集合A,集合B中的元素个数:\n);scanf(%d%d,&m,&n);printf(请输入集合A的元素:\n);for(i=0;im;i++)scanf(%d,&a[i]);printf(请输入集合B的元素:\n);for(i=0;in;i++)scanf(%d,&b[i]);printf(A={);for(i=0;im;i++)printf(%d,,a[i]);putchar('\b');printf(}\n);printf(B={);for(i=0;in;i++)printf(%d,,b[i]);putchar('\b');printf(}\n);《离散数学》实验报告7for(i=0;im;i++)c[k++]=a[i];for(j=0;jn;j++){for(i=0;im;i++)if(b[j]==c[i])break;if(i==m)c[k++]=b[j];}printf(A∪B={);for(i=0;ik;i++)printf(%d,,c[i]);putchar('\b');printf(}\n);}相对差:#includestdio.hintmain(){inta[10],b[10],c[20],i,m,n,j,k=0,t;printf(请输入集合A,集合B中的元素个数:\n);scanf(%d%d,&m,&n);《离散数学》实验报告8printf(请输入集合A的元素:\n);for(i=0;im;i++)scanf(%d,&a[i]);printf(请输入集合B的元素:\n);for(i=0;in;i++)scanf(%d,&b[i]);printf(A={);for(i=0;im;i++)printf(%d,,a[i]);putchar('\b');printf(}\n);printf(B={);for(i=0;in;i++)printf(%d,,b[i]);putchar('\b');printf(}\n);for(i=0;im;i++)c[k++]=a[i];for(j=0;jn;j++){for(i=0;im;i++)《离散数学》实验报告9if(b[j]==c[i]){for(t=i;tk;t++){c[t]=c[t+1];}k--;}}printf(A-B={);for(i=0;ik;i++)printf(%d,,c[i]);putchar('\b');printf(}\n);}对称差:#includestdio.hintmain(){inta[10],b[10],c[20],c1[20],c2[20],i,m,n,j,k1=0,k2=0,k=0,t;《离散数学》实验报告10printf(请输入集合scanf(%d,&b[i]);printf(A={);for(i=0;im;i++)printf(%d,,a[i]);putchar('\b');printf(}\n);printf(B={);for(i=0;in;i++)printf(%d,,b[i]);putchar('\b');printf(}\n);for(i=0;im;i++)c1[k1++]=a[i];for(j=0;jn;j++){for(i=0;im;i++)if(b[j]==c1[i]){for(t=i;tk1;t++){《离散数学》实验报告11c1[t]=c1[t+1];}k1--;}}for(j=0;jn;j++)c2[k2++]=b[j];for(j=0;jm;j++){for(i=0;in;i++)if(a[j]==c2[i]){for(t=i;tk2;t++){c2[t]=c2[t+1];}k2--;}}for(i=0;ik1;i++)c[k++]=c1[i];for(j=0;jk2;j++)《离散数学》实验报告12{for(i=0;ik1;i++)if(c2[j]==c[i])break;if(i==k1)c[k++]=c2[j];}printf(A⊕B={);for(i=0;ik;i++)printf(%d,,c[i]);putchar('\b');printf(}\n);}五.实验结果实验结果截图大小为:宽(10cm)×高(8cm)交集运算:《离散数学》实验报告13并集运算相对差运算《离散数学》实验报告14对称差运算六.心得体会内容格式:宋体,五号,行间距固定值18磅《离散数学》实验报告15实验三二元关系的性质判定一.实验目的二元关系是离散数学中的一个重要的基本概念,定义在某一集合上的二元关系有自反性、反自反性、对称性、反对称性和传递性,二元关系的性质是学习特殊二元关系的基础,通过编程判断二元关系的性质,帮助同学们更好地理解二元关系相关性质定义。二.实验原理自反性质:设R是X集合上的二元关系,对于每一个x∈X,若有xRx,则称R是自反关系。反自反性质:设R是X上的二元关系,对于每一个xX,有xRx,则称R有反自反的关系。对称性质:设R是X上的二元关系,对于每一个x,y∈X。若xRy时有yRx,则称R是对称关系。反对称性质:设R是X集合上的二元关系,对于每一个x,y∈R(x≠y),若y,x∈R,则称R是反对称关系。传递性质:设R为定义在集合X上的二元关系,如果对于任意的x,y,z∈X,每当xRy,yRz时就有xRz,称关系R在X上是传递的。三.实验内容编程输入一个集合以及该集合上的一种二元关系,判断该二元关系具有哪些性质。四.算法程序内容格式:新罗马,小五号,行间距固定值18磅#includestdio.hintm,n,i,j,k;intX[20],R[20];voidzifan(){k=0;for(i=0;im;i++)for(j=0;j2*n;j=j+2)if(R[j]==R[j+1]&&R[j]==X[i])k++;if(k==m)printf(R具有自反性\n);《离散数学》实验报告16if(k==0)printf(R具有反自反性\n);}voidduichen(){k=0;for(j=0;j2*n;j=j+2)for(i=0;i2*n;i=i+2)if(R[j]==R[i+1]&&R[j+1]==R[i])k++;if(k==n)printf(R具有对称性\n);if(k==0)printf(R具有反对称性\n);}voidchuandi(){ints;for(j=0;j2*n;j=j+2){