离散数学实验指导书及其答案
离散数学(第二版)课后习题答案详解(完整版)

离散数学(第⼆版)课后习题答案详解(完整版)习题⼀1.下列句⼦中,哪些是命题?在是命题的句⼦中,哪些是简单命题?哪些是真命题?哪些命题的真值现在还不知道?(1)中国有四⼤发明.答:此命题是简单命题,其真值为 1.(2)5 是⽆理数.答:此命题是简单命题,其真值为 1.(3)3 是素数或 4 是素数.答:是命题,但不是简单命题,其真值为1.(4)2x+ <3 5 答:不是命题.(5)你去图书馆吗?答:不是命题.(6)2 与3 是偶数.答:是命题,但不是简单命题,其真值为0.(7)刘红与魏新是同学.答:此命题是简单命题,其真值还不知道.(8)这朵玫瑰花多美丽呀!答:不是命题.(9)吸烟请到吸烟室去!答:不是命题.(10)圆的⾯积等于半径的平⽅乘以π.答:此命题是简单命题,其真值为 1.(11)只有6 是偶数,3 才能是2 的倍数.答:是命题,但不是简单命题,其真值为0.(12)8 是偶数的充分必要条件是8 能被3 整除.答:是命题,但不是简单命题,其真值为0.(13)2008 年元旦下⼤雪.答:此命题是简单命题,其真值还不知道.2.将上题中是简单命题的命题符号化.解:(1)p:中国有四⼤发明.(2)p: 是⽆理数.(7)p:刘红与魏新是同学.(10)p:圆的⾯积等于半径的平⽅乘以π.(13)p:2008 年元旦下⼤雪.3.写出下列各命题的否定式,并将原命题及其否定式都符号化,最后指出各否定式的真值.(1)5 是有理数.答:否定式:5 是⽆理数. p:5 是有理数.q:5 是⽆理数.其否定式q 的真值为1.(2)25 不是⽆理数.答:否定式:25 是有理数. p:25 不是⽆理数. q:25 是有理数. 其否定式q 的真值为1.(3)2.5 是⾃然数.答:否定式:2.5 不是⾃然数. p:2.5 是⾃然数. q:2.5 不是⾃然数. 其否定式q 的真值为1.(4)ln1 是整数.答:否定式:ln1 不是整数. p:ln1 是整数. q:ln1 不是整数. 其否定式q 的真值为1.4.将下列命题符号化,并指出真值.(1)2 与5 都是素数答:p:2 是素数,q:5 是素数,符号化为p q∧,其真值为 1.(2)不但π是⽆理数,⽽且⾃然对数的底e 也是⽆理数.答:p:π是⽆理数,q:⾃然对数的底e 是⽆理数,符号化为p q∧,其真值为1.(3)虽然2 是最⼩的素数,但2 不是最⼩的⾃然数.答:p:2 是最⼩的素数,q:2 是最⼩的⾃然数,符号化为p q∧? ,其真值为1.(4)3 是偶素数.答:p:3 是素数,q:3 是偶数,符号化为p q∧,其真值为0.(5)4 既不是素数,也不是偶数.答:p:4 是素数,q:4 是偶数,符号化为? ∧?p q,其真值为0.5.将下列命题符号化,并指出真值.(1)2 或3 是偶数.(2)2 或4 是偶数.(3)3 或5 是偶数.(4)3 不是偶数或4 不是偶数.(5)3 不是素数或4 不是偶数.答: p:2 是偶数,q:3 是偶数,r:3 是素数,s:4 是偶数, t:5 是偶数(1)符号化: p q∨,其真值为1.(2)符号化:p r∨,其真值为1.(3)符号化:r t∨,其真值为0.(4)符号化:? ∨?q s,其真值为1.(5)符号化:? ∨?r s,其真值为0.6.将下列命题符号化.(1)⼩丽只能从筐⾥拿⼀个苹果或⼀个梨.答:p:⼩丽从筐⾥拿⼀个苹果,q:⼩丽从筐⾥拿⼀个梨,符号化为: p q∨ .(2)这学期,刘晓⽉只能选学英语或⽇语中的⼀门外语课.答:p:刘晓⽉选学英语,q:刘晓⽉选学⽇语,符号化为: (? ∧∨∧?p q)(p q) .7.设p:王冬⽣于1971 年,q:王冬⽣于1972 年,说明命题“王冬⽣于1971 年或1972年”既可以化答:列出两种符号化的真值表:合命题可以发现,p 与q 不可能同时为真,故上述命题有两种符号化⽅式.8.将下列命题符号化,并指出真值., 就有;(1)只要, 则;, 才有;(3)只有, 才有;(4)除⾮, 否则;(5)除⾮(6)仅当.答:设p: , 则: ; 设q: , 则: .(1);(2);;(3);(4);(5);(6);(7).答:根据题意,p 为假命题,q 为真命题.(1);(2);(3);(4).答:根据题意,p 为真命题,q 为假命题.(1)若2+2=4,则地球是静⽌不动的;(2)若2+2=4,则地球是运动不⽌的;(3)若地球上没有树⽊,则⼈类不能⽣存;(4)若地球上没有⽔,则是⽆理数.12.将下列命题符号化,并给出各命题的真值:(1)2+2=4 当且仅当3+3=6;(2)2+2=4 的充要条件是3+3 6;(3)2+2 4 与3+3=6 互为充要条件;(4)若2+2 4,则3+3 6,反之亦然.答:设p:2+2=4,q:3+3=6.(1)若今天是星期⼀,则明天是星期⼆;(2)只有今天是星期⼀,明天才是星期⼆;(3)今天是星期⼀当且仅当明天是星期⼆;(4)若今天是星期⼀,则明天是星期三.答:设p:今天是星期⼀,q:明天是星期⼆,r:明天是星期三.(1)刘晓⽉跑得快,跳得⾼;(2)⽼王是⼭东⼈或者河北⼈;(3)因为天⽓冷,所以我穿了⽻绒服;(4)王欢与李乐组成⼀个⼩组;(5)李欣与李末是兄弟;(6)王强与刘威都学过法语;(7)他⼀⾯吃饭,⼀⾯听⾳乐;(8)如果天下⼤⾬,他就乘班车上班;(9)只有天下⼤⾬,他才乘班车上班;(10)除⾮天下⼤⾬,否则他不乘班车上班;(11)下雪路滑,他迟到了;(12)2 与4 都是素数,这是不对的;(13)“2 或 4 是素数,这是不对的”是不对的.答:q:⼤熊猫产在中国.r:太阳从西⽅升起. 求下列符合命题的真值:(1)(2)(3)(4)解:p真值为1,q 真值为1,r 真值为0.(1)0,(2)0,(3)0,(4)116.当p,q 的真值为0,r,s 的真值为1 时,求下列各命题公式的真值:(1)(2)(3)(4)解:(1)0,(2)0,(3)0,(4)117.判断下⾯⼀段论述是否为真:“ 是⽆理数.并且,如果3 是⽆理数,则也是⽆理数.另外,只有6 能被2 整除,6 才能被4 整除.”解:p: 是⽆理数q: 3 是⽆理数r:是⽆理数s: 6 能被2 整除t:6 能被 4 整除符号化为: ,该式为重⾔式,所以论述为真。
离散数学第2版课后习题答案

离散数学第2版课后习题答案离散数学是计算机科学和数学领域中一门重要的学科,它研究离散对象及其关系、结构和运算方法。
离散数学的应用非常广泛,包括计算机科学、信息科学、密码学、人工智能等领域。
而离散数学第2版是一本经典的教材,它系统地介绍了离散数学的基本概念、原理和方法。
本文将为读者提供离散数学第2版课后习题的答案,帮助读者更好地理解和掌握离散数学的知识。
第一章:基本概念和原理1.1 命题逻辑习题1:命题逻辑的基本符号有哪些?它们的含义是什么?答:命题逻辑的基本符号包括命题变量、命题联结词和括号。
命题变量用字母表示,代表一个命题。
命题联结词包括否定、合取、析取、条件和双条件等,分别表示“非”、“与”、“或”、“如果...则...”和“当且仅当”。
括号用于改变命题联结词的优先级。
习题2:列举命题逻辑的基本定律。
答:命题逻辑的基本定律包括德摩根定律、分配律、结合律、交换律、吸收律和否定律等。
1.2 集合论习题1:什么是集合?集合的基本运算有哪些?答:集合是由一些确定的对象组成的整体,这些对象称为集合的元素。
集合的基本运算包括并、交、差和补等。
习题2:列举集合的基本定律。
答:集合的基本定律包括幂等律、交换律、结合律、分配律、吸收律和德摩根定律等。
第二章:数理逻辑2.1 命题逻辑的推理习题1:什么是命题逻辑的推理规则?列举几个常用的推理规则。
答:命题逻辑的推理规则是用来推导命题的逻辑规则。
常用的推理规则包括假言推理、拒取推理、假言三段论和析取三段论等。
习题2:使用推理规则证明以下命题:如果A成立,则B成立;B不成立,则A不成立。
答:假言推理规则可以用来证明该命题。
根据假言推理规则,如果A成立,则B成立。
又根据假言推理规则,如果B不成立,则A不成立。
2.2 谓词逻辑习题1:什么是谓词逻辑?它与命题逻辑有何区别?答:谓词逻辑是一种扩展了命题逻辑的逻辑系统,它引入了谓词和量词。
与命题逻辑不同,谓词逻辑可以对个体进行量化和描述。
离散数学上机实验指导

离散数学上机实验指导徐凤生如果你需要索取源程序,请发邮件至xfs@。
实验11实验内容(1)求任意一个命题公式的真值表。
(2)利用真值表求任意一个命题公式的主范式。
(3)利用真值表进行逻辑推理。
注:(2)和(3)可在(1)的基础上完成。
2实验目的真值表是命题逻辑中的一个十分重要的概念,利用它几乎可以解决命题逻辑中的所有问题。
例如,利用命题公式的真值表,可以判断命题公式的类型、求命题公式的主范式、判断两命题公式是否等价,还可以进行推理等。
本实验通过编写一个程序,让计算机给出命题公式的真值表,并在此基础上进行命题公式类型的判定、求命题公式的主范式等。
目的是让学生更加深刻地理解真值表的概念,并掌握真值表的求解方法及其在解决命题逻辑中其他问题中的应用。
3算法的主要思想利用计算机求命题公式真值表的关键是:①给出命题变元的每一组赋值;②计算命题公式在每一组赋值下的真值。
真值表中命题变元的取值具有如下规律:每列中0和1是交替出现的,且0和1连续出现的个数相同。
n个命题变元的每组赋值的生成算法可基于这种思想。
含有n个命题变元的命题公式的真值的计算采用的方法为“算符优先法”。
为了程序实现的方便,约定命题变元只用一个字母表示,非、合取、析取、条件和双条件联结词分别用!、&、|、-、+来表示。
算符之间的优先关系如表1-32所示:为实现算符优先算法,另一个称作OPND,用以寄存操作数或运算结果。
算法的基本思想是:(1)首先设置操作数栈为空栈,符号“@”为运算符的栈底元素;(2)调用函数Divi(exp,myopnd)得到命题公式包含的命题变元序列myopnd(按字典序排列,同一个命题变元只出现一次);(3)依次读入命题公式中的每个字符,若是命题变元则其对应的赋值进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较后作相应操作,直至整个命题公式求值完毕。
实验21实验内容(1)求任意两个集合的交集、并集、差集。
(2)求任意一个集合的幂集。
离散数学课后答案(第1,2,4章)武汉大学出版社教学内容

习题1.11、(1)否(2)否(3)是,真值为0(4)否(5)是,真值为12、(1)P:天下雨Q:我去教室┐P →Q(2)P:你去教室Q:我去图书馆P →Q(3)P,Q同(2)Q →P(4)P:2是质数Q:2是偶数P∧Q3、(1)0(2)0(3)14、(1)如果明天是晴天,那么我去教室或图书馆。
(2)如果我去教室,那么明天不是晴天,我也不去图书馆。
(3)明天是晴天,并且我不去教室,当且仅当我去图书馆。
习题1.21、(1)是(2)是(3)否(4)是(5)是(6)否2、(1)(P →Q) →R,P →Q,R,P,Q(2)(┐P∨Q) ∨(R∧P),┐P ∨Q,R∧P,┐P,Q,R,P(3)((P →Q) ∧(Q →P)) ∨┐(P →Q)),(P →Q) ∧(Q →P),┐(P →Q),P →Q,(Q →P),P →Q,P,Q,Q,P,P,Q3、(1)((P →Q) →(Q →P)) →(P →Q)(2)((P →Q) ∨((P →Q) →R))→((P →Q) ∧((P →Q) →R))(3)(Q →P∧┐P) →(P∧┐P →Q)4、(P →Q) ∨((P∧Q) ∨(┐P∧┐Q)) ∧(┐P∨Q)习题1.31、(1)I(P∨(Q∧R)) = I(P)∨(I(Q)∧I(R)) = 1∨(1∧0) = 1(2)I((P∧Q∧R)∨(┐(P∨Q)∧┐(R∨S))) = (1∧1∧0)∨(┐(1∨1)∧┐(0∨1)) = 0∨(0∧0) = 0(3)I((P←→R)∧(┐Q→S)) = (1←→0)∧(┐1→1) = 0∧1 = 0(4)I((P∨(Q→R∧┐P))←→(Q∨┐S)) = (1∨(1→(0∧┐1)))←→(1∨┐1) = 1←→1 = 1(5)I(┐(P∧Q)∨┐R∨((Q←→┐P)→R∨┐S)) = ┐(1∧1)∨┐0∨((1←→┐1)→(0∨┐1)) = 0∨1∨1 = 12、(1)P Q P→Q Q∧(P→Q) Q∧(P→Q)→P0 0 1 0 10 1 1 1 01 0 0 0 11 1 1 1 1(2)P Q R Q∧R ┐(P∨(Q∧R)) P∨Q P∨R (P∨Q)∧(P∨R) 原式0 0 0 0 1 0 0 0 00 0 1 0 1 0 1 0 00 1 0 0 1 1 0 0 00 1 1 1 0 1 1 1 01 0 0 0 0 1 1 1 01 0 1 0 0 1 1 1 01 1 0 0 0 1 1 1 01 1 1 1 0 1 1 1 0(3)P Q R P∨Q Q∧P P∨Q→Q∧P P∧┐R 原式0 0 0 0 0 1 0 00 0 1 0 0 1 0 00 1 0 1 0 0 0 10 1 1 1 0 0 0 11 0 0 1 0 0 1 11 0 1 1 0 0 0 11 1 0 1 1 1 1 11 1 1 1 1 1 0 03、(1)原式<=> F→Q <=> T 原式为永真式(2)原式<=> ┐T∨(┐(┐P∨Q)∨(┐┐Q∨┐P)) <=> (P∧┐Q)∨(Q∨┐P)<=> (P∧┐Q)∨┐(P∧┐Q) <=> T 原式为永真式(3)原式<=> ┐(P∧Q) ←→┐(P∧Q) <=> T 原式为永真式(4)原式<=> P∧(Q∨R) ←→P∧(Q∨R) <=> T 原式为永真式(5)原式<=> ┐(P∨┐Q)∨Q <=> (┐P∧Q)∨Q <=> Q 原式为可满足式(6)原式<=> ┐(P∧Q)∨P <=> ┐P∨┐Q∨P <=> T∨┐Q <=> T 原式为永真式(7)原式<=> (┐P∨P∨Q)∧┐P <=> (T∨Q)∧┐P<=> T∧┐P <=> ┐P 原式为可满足式(8)原式<=> ┐((P∨Q) ∧(┐Q∨R))∨(┐P∨R) <=> (P∧┐Q)∨(Q∧┐R)∨(┐P∨R)<=> ((P∧┐Q)∨┐P)∨((Q∧┐R)∨R)<=>(( P∨┐P)∧(┐Q∨┐P))∨(( Q∨R)∧(┐R∨R))<=> (┐Q∧┐P)∨( Q∨R) <=> T 原式为永真式4、(1)左<=> ┐P∨┐Q∨P <=> ┐┐P∨(┐P∨┐Q) <=> 右(2)左<=> ┐(┐P∨Q) <=> 右(3)左<=> ┐(P∧Q)∨P <=> ┐P∨┐Q∨P <=> T∨┐Q <=> 右(4)左<=> ┐(P→Q)∨┐(Q→P) <=> (P∧┐Q)∨(Q∧┐P) <=> 中<=> ((P∧┐Q)∨Q)∧((P∧┐Q)∨┐P)<=> (P∨Q)∧(┐Q∨Q)∧(P∨┐P)∧(┐Q∨┐P)<=> (P∨Q)∧┐(P∧Q) <=> 右(5)左( P Q) ( R Q) (P Q) Q 右5.(1)左Q P Q 右(2)(P (Q R)) ((P Q) (P R))( P Q R) ( P Q) ( P R)(P Q R) (P Q) P R(P Q R) ((P P) ( Q P)) R(P Q R) ( Q P R)(P Q R) (P Q R)T故P (Q R) (P Q) (P R)(3).(P Q) (P P Q)( P Q) P (P Q)( P Q) ( P P) ( P Q)( P Q) ( P Q)T故P Q P P Q(4).((P Q) Q) P Q( ( P Q) Q) P Q(( P Q) Q) P Q( P Q) (Q Q) P Q(P Q) (P Q)T故(P Q) Q P Q(5).((P P) Q) ((P P) R) (Q R)(( T Q) ( T R)) Q R(Q R) Q RQ R Q RQ TT故((P P) Q) ((P P) R) Q R(6)左(Q F) (R F)( Q F) ( R F)Q RRR Q 右6.(1)原式( P Q R)(2)原式P Q P (P Q P)(3)原式P (Q R P) P Q R ( P Q R)7.(1)原式( P Q P)(2)原式( P Q R) P Q ( ( P Q R) P Q)(3)原式P Q (R P) (P Q (R P))8. (1) (P Q) (( P ( P Q)) R) P(2)(P Q R) ( P R)(3)(P F) (Q T)习题1.41.(1)原式( P Q) (( P Q) (Q P))( P Q) (Q P)(P Q) Q PQ P,既是析取范式又是合取范式(2)原式(( P Q) ( P Q)) ( ( P Q) ( P Q))(P Q) (P Q) 析取范式P (Q Q)合取范式(3)原式P Q S ( P Q)析取范式( P ( P Q)) Q SP Q S合取范式(4)原式P P Q Q R既是析取范式又是合取范式2.(1)原式P Q R为真的解释是:000,001,011,100,101,110,111故原式的主析取范式为:( P Q R) ( P Q R) ( P Q R) (P Q R) (P QR) (P Q R) (P Q R)(2)原式(P Q) R(P Q (R R)) ((P P) R)(P Q R) (P Q R) (P Q) ( P R)(P Q R) (P Q R) (P (Q Q) R) ( P (Q Q) R)(P Q R) (P Q R) (P Q R) (P Q R) ( P Q R) ( P Q R)(P Q R) (P Q R) (P Q R) ( P Q R) ( P Q R)为真的解释是101,100,111,011,001(3)原式( P (Q R)) (P ( Q R))(( P (Q R)) P) (( P (Q R)) ( Q R))( P P) (Q P R) ( P Q R) (Q R Q R)(P Q R) ( P Q R)为真的解释是:000,111(4)原式P P Q Q R P Q R为真的解释是:001,010,011,100,101,110,111故原式的主析取范式为:( P Q R) ( P Q R) ( P Q R) (P Q R) (P Q R) (P Q R) (P Q R)3.(1)原式P Q P Q T主合取范式,无为假的解释。
离散数学实验指导书

实验一真值计算一、实验目的熟悉联结词合取、析取、条件和双条件的概念,编程求其真值。
二、实验内容从键盘输入两个命题P和Q的真值,求它们的合取、析取、条件和双条件的真值。
用C语言或MATLAB实现。
三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。
实验二关系闭包计算一、实验目的熟悉Warshall算法,掌握求关系的自反闭包、对称闭包和传递闭包的方法。
二、实验内容从键盘输入一个关系的关系矩阵,计算其自反闭包、对称闭包和传递闭包,计算传递闭包时使用Warshall算法。
用C语言或MATLAB实现。
三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。
实验三计算两结点间长度为m的路的数目一、实验目的熟悉邻接矩阵和两结点间长度为m的路的数目的关系并编程计算。
二、实验内容从键盘输入图的邻接矩阵和一正整数m,计算结点两两之间长度为m的路的数目。
考虑有向图和无向图。
用C语言或MATLAB实现。
三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。
实验四最优树的构造一、实验目的熟悉最优树的构造算法,掌握最优树的构造过程。
二、实验内容从键盘输入一组权值,构造出对应的最优树,列出构造过程。
用C语言或MATLAB实现。
三、实验报告要求列出实验目的、实验内容、实验步骤、源程序和实验结果。
部分参考答案:实验二C++源程序#include<iostream.h>int num;class guanxi{public:int jz[100][100];void set(){cout<<"shu ru yuan su shu"<<endl;cin>>num;cout<<"put in the guanxi"<<endl;int i,j;for(i=0;i<num;i++)for(j=0;j<num;j++)cin>>jz[i][j];cout<<"关系剧阵是:"<<endl;for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<jz[i][j]<<" ";if (j==num-1)cout<<endl;}cout<<endl;}friend void zifan();friend void duichen();friend void chuandi();};void zifan(guanxi ox){int i,j;for(i=0;i<num;i++)ox.jz[i][i]=1;for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}void duichen(guanxi ox){int i,j;for(i=0;i<num;i++)for(j=0;j<num;j++){if(ox.jz[i][j]==1)ox.jz[j][i]=1;}for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}void chuandi(guanxi ox){int i,j,k;for(i=0;i<num;i++)for(k=0;k<num;k++)if(ox.jz[k][i]==1){for(j=0;j<num;j++)if(ox.jz[i][j]==1)ox.jz[k][j]=1;}for(i=0;i<num;i++)for(j=0;j<num;j++){cout<<ox.jz[i][j]<<" ";if (j==num-1)cout<<endl;}}main(){guanxi o1;o1.set();cout<<"它的自反闭包是:"<<endl;zifan(o1);cout<<"它的对称闭包是:"<<endl;duichen(o1);cout<<"它的传递闭包是:"<<endl;chuandi(o1);return 0;}C源程序#include<stdio.h>int main(){int i,j,k,n;static int str[122],zifan[122],chuandi[122],duich[122];printf("Please input the jie:\n");scanf("%d",&n);printf("A=%d\n",n);for(i=0;i<n*n;i++){scanf("%d",&str[i]);}printf("The shu zu is:\n");for(j=0;j<n*n;j++){printf("%4d",str[j]);if((j+1)%n==0)printf("\n");}for(j=0;j<n*n;j++){zifan[j]=str[j];chuandi[j]=str[j];duich[j]=str[j];}printf("The zifan bibao is:\n");for(i=0;i<n*n;i++){if(i%(n+1)==0)zifan[i]=zifan[i]||1;printf("%4d",zifan[i]);if((i+1)%n==0)printf("\n");}printf("The duich bibao is:\n");for(i=0,j=0;i<n*n&&j<n;i++){if(i>j*(n+1)&&i<(j+1)*n){ duich[i]=duich[(i-j*(n+1))*(n-1)+i]||duich[i];duich[(i-j*(n+1))*(n-1)+i]=duich[(i-j*(n+1))*(n-1)+i]||duich[i];}else if(i>=(j+1)*n)j++;}for(i=0;i<n*n;i++){printf("%4d",duich[i]);if((i+1)%n==0)printf("\n");}printf("The chuandi bibao is:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)if(chuandi[j*n+i]){for(k=0;k<n;k++)chuandi[j*n+k]=chuandi[j*n+k]||chuandi[i*n+k];}for(i=0;i<n*n;i++){printf("%4d",chuandi[i]);if((i+1)%n==0)printf("\n");}return 0;}实验三#include <iostream.h>class luchang{private:int N;int **p;public:luchang(int n);~luchang();int input();luchang &operator =(luchang &A);luchang &mul(luchang &A,luchang &B);void disply();int disply(int M);};luchang::luchang(int n){N=n;int i;p=new int*[N];for (i=0;i<N;i++)p[i]=new int[N];}luchang::~luchang(){int i;for (i=0;i<N;i++)delete p[i];delete p;}int luchang::input(){int i,j;for (i=0;i<N;i++){for (j=0;j<N;j++)cin>>p[i][j];}return 0;}luchang& luchang::operator =(luchang &A){int i,j;for (i=0;i<N;i++){for(j=0;j<N;j++)p[i][j]=A.p[i][j];}return *this;}luchang& luchang::mul(luchang &A,luchang &B) {int i,j,k,sum=0;for (i=0;i<N;i++){for (j=0;j<N;j++){for (k=0;k<N;k++){sum+=B.p[i][k]*A.p[k][j];p[i][j]=sum;}sum=0;}}return *this;}void luchang::disply(){for (int i=0;i<N;i++){for (int j=0;j<N;j++)cout<<p[i][j]<<" ";cout<<endl;}}int luchang::disply(int M){int i,j;int count=0;for (i=0;i<N;i++){for (j=0;j<N;j++){if (p[i][j]==M)count++;else continue;}}cout<<count<<endl;return 0;}void main(){cout<<"请输入图中的点数V"<<endl;int n=0;cin>>n;luchang ob1(n),ob2(n),ob3(n);cout<<"请输入邻接矩阵"<<endl;ob1.input();ob2=ob1;ob3=ob1;cout<<"请输入要查找的路长M"<<endl;int M=0;cin>>M;for (int i=0;i<M-1;i++){ob3.mul(ob1,ob2);ob2=ob3;}ob3.disply();ob3.disply(M);cout<<endl;}。
《离散数学》实验课程指导书

printf("您要在多少个数中进行线性查找,请输入(1~100):");
scanf("%d",&n);
printf("\n");
while(n<1 || n>100) //如果输入的数据列表长度不在[1,100]之间
scanf("%d",&a[i]);
i=0;
do
{
exchanged=0;
for(j=0;j<l-1-i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
exchanged=1;
}
if (i==0)
printf("\n");
printf("第%d趟冒泡排序法由小到大排序后:\n",i+1);
{ int r[50];
int length;
}list,*sqlist;
int CreateSqlist(sqlist s)
{
int i;
printf("请输入您要进行搜索的数据队列的长度:\n");
scanf("%d",&(s->length));
printf("\n请输入您要进行搜索的%d个数据:\n",s->length);
printf("冒泡排序算法\n");
离散数学课后习题答案 (2)

离散数学课后习题答案1. 第一章习题答案1.1 习题一答案1.1.1 习题一.1 答案根据题意,设集合A和B如下:Set A and BSet A and B在此情况下,我们可以得出以下结论:•A的幂集为{ {}, {a}, {b}, {a, b} };•B的幂集为{ {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} };•A和B的笛卡尔积为{ (a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3) }。
因此,习题一.1的答案为:•A的幂集为{ {}, {a}, {b}, {a, b} };•B的幂集为{ {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} };•A和B的笛卡尔积为{ (a, 1), (a, 2), (a, 3), (b, 1), (b,2), (b, 3) }。
1.1.2 习题一.2 答案根据题意,集合A和B如下所示:Set A and BSet A and B根据集合的定义,习题一.2要求我们判断以下命题的真假性:a)$A \\cap B = \\{ 2, 3 \\}$b)$\\emptyset \\in B$c)$A \\times B = \\{ (a, 2), (b, 1), (b, 3) \\}$d)$B \\subseteq A$接下来,我们来逐个判断这些命题的真假性。
a)首先计算集合A和B的交集:$A \\cap B = \\{ x\\,|\\, x \\in A \\, \\text{且} \\, x \\in B \\} = \\{ 2, 3 \\}$。
因此,命题a)为真。
b)大家都知道,空集合是任意集合的子集,因此空集合一定属于任意集合的幂集。
根据题意,$\\emptyset \\in B$,因此命题b)为真。
c)计算集合A和B的笛卡尔积:$A \\times B = \\{ (x, y) \\,|\\, x \\in A \\, \\text{且} \\, y \\in B \\} = \\{ (a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3) \\}$。
《离散数学》实验指导书-2019版

《离散数学》课程实验指导书《离散数学》实验指导书合肥工业大学计算机与信息学院王晓华,杨娟,李书杰,汪荣贵2019年09月目录目录 (1)概述 (3)第一篇数理逻辑 (4)实验1 逻辑运算表示与验证 (4)1.1 实验要求和目的 (4)1.2 实验课时 (4)1.3 实验环境 (4)1.4 实验平台简介 (4)实验2 交通信号灯模型设计 (6)2.1 实验要求和目的 (6)2.2 实验课时 (6)2.3 实验环境 (6)2.4 思考题 (6)第二篇集合与关系 (7)实验3 小型关系数据库系统实现 (7)3.1 实验要求和目的 (7)3.2 实验课时 (7)3.3 实验环境 (7)3.4 实验平台简介 (7)实验4 关系的闭包运算及Floyd-Warshall算法求解 (10)4.1 实验要求和目的 (10)4.2 实验课时 (10)4.3 实验环境 (10)4.4 实验平台简介 (10)第三篇整数论 (12)实验5 数论之模运算 (12)5.1 实验要求和目的 (12)5.2 实验课时 (12)5.3 实验环境 (12)5.4 实验平台简介 (12)第四篇图论 (16)实验6 最短路径的Dijstra与Floyd-Warshal算法实现 (16)6.1 实验要求和目的 (16)6.2 实验课时 (16)6.3 实验环境 (16)6.4 实验平台简介 (16)实验7 欧拉回路的DFS或Fleury算法求解 (20)7.1 实验要求和目的 (20)7.2 实验课时 (20)7.3 实验环境 (20)7.4 实验平台简介 (20)实验8 最优树的Huffman算法求解 (22)8.1 实验要求和目的 (22)8.2 实验课时 (22)8.3 实验环境 (22)8.4 实验平台简介 (22)实验9 多相位交通信号灯智能控制模型设计与算法实现 (24)9.1 实验要求和目的 (24)9.2 实验课时 (25)9.3 实验环境 (25)9.4 思考题 (25)附录A:实验报告 (26)概述(1)实验概述运用某种程序设计语言选择并设计实现离散数学的数理逻辑系统、集合与关系、整数论、图论四个篇章共8个实验的相关内容,以检验和巩固离散数学中的基本知识、加深对本课程定义、定理、算法的理解,锻炼和培养学生的计算思维能力,完成系统设计,实现问题求解,达到有效提升综合实践能力和创新能力的目的,并有效缓解离散数学课程概念多、理论性强、高度抽象等特点给学生带来的畏难情绪。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一命题逻辑公式化简【实验目的】加深对五个基本联结词(否定、合取、析取、条件、双条件)的理解、掌握利用基本等价公式化简公式的方法。
【实验内容】用化简命题逻辑公式的方法设计一个表决开关电路。
实验用例:用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过(表决开关亮)。
【实验原理和方法】(1)写出5人表决开关电路真值表,从真值表得出5人表决开关电路的主合取公式(或主析取公式),将公式化简成尽可能含五个基本联结词最少的等价公式。
(2)上面公式中的每一个联结词是一个开关元件,将它们定义成C语言中的函数。
(3)输入5人表决值(0或1),调用上面定义的函数,将5人表决开关电路真值表的等价公式写成一个函数表达式。
(4)输出函数表达式的结果,如果是1,则表明表决通过,否则表决不通过。
参考代码:#include<stdio.h>int vote(int a,int b,int c,int d,int e){//五人中任取三人的不同的取法有10种。
i f( 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;e lsereturn 0;}void main(){i nt a,b,c,d,e;p rintf("请输入第五个人的表决值(0或1,空格分开):");s canf("%d%d%d%d%d",&a,&b,&c,&d,&e);i f(vote(a,b,c,d,e))printf("很好,表决通过!\n");e lseprintf("遗憾,表决没有通过!\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语言算法:i nt A,B,C,D,E;f or(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\n",A,B);}/*实验结果是:A=0,B=1,即B偷了手表*/实验三集合运算【实验目的】掌握用计算机求集合的交、并、差和补运算的方法。
【实验内容】编程实现集合的交、并、差和补运算。
【实验原理和方法】(1)用数组A,B,C,E表示集合。
输入数组A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合A,B是集合E的子集。
以下每一个运算都要求先将集合C置成空集。
(2)二个集合的交运算:把数组A中元素逐一与数组B中的元素进行比较,将相同的元素放在数组C中,数组C便是集合A和集合B的交。
C语言算法:f or(i=0;i<m;i++)for(j=0;j<n;j++)if(a[i]==b[j]) c[k++]=a[i];(3)二个集合的并运算:把数组A中各个元素先保存在数组C中。
将数组B中的元素逐一与数组B中的元素进行比较,把不相同的元素添加到数组C中,数组C便是集合A和集合B的并。
C语言算法:for(i=0;i<m;i++)c[i]=a[i];f or(i=0;i<n;i++){for(j=0;j<m;j++)if(b[i]==c[j]) break;if(j==m){ c[m+k]=b[i];k++;}}(4)二个集合的差运算:把数组A中各个元素先保存在数组C中。
将数组B中的元素逐一与数组B中的元素进行比较,把相同的元素从数组C中删除,数组C便是集合A和集合B的差A-B。
C语言算法:f or(i=0;i<m;i++)c[i]=a[i];f or(i=0;i<n;i++)for(j=0;j<m;j++)if(b[i]==c[j]){for(k=j;k<m;k++)c[k]=c[k+1];/*移位*/m--;break;}(5)集合的补运算:将数组E中的元素逐一与数组A中的元素进行比较,把不相同的元素保存到数组C中,数组C便是集合A关于集合E的补集。
求补集是一种种特殊的集合差运算。
实验四 二元关系及其性质【实验目的】掌握二元关系在计算机上的表示方法,并掌握如果判定关系的性质。
【实验内容】 编程判断一个二元关系是否为等价关系,如果是,求其商集。
等价关系:集合A 上的二元关系R 同时具有自反性、对称性和传递性,则称R 是A 上的等价关系。
【实验原理和方法】(1)A 上的二元关系用一个n ×n 关系矩阵R=n n ij r ⨯)(表示,定义一个n ×n 数组r[n][n]表示n ×n 矩阵关系。
(2)若R 对角线上的元素都是1,则R 具有自反性。
C 语言算法:int i,flag=1;for(i=0;i<N && flag ;i++)if(r[i][i]!=1) flag=0; 如果flag=1, 则R 是自反关系(3)若R 是对称矩阵,则R 具有对称性。
对称矩阵的判断方法是:R r R r ji ij ∈∀∈∀有,。
C 语言算法:int i,j,flag=1;for(i=0;i<N && flag ;i++)for(j=i+1;j<N && flag;j++)if(r[i][j] &&r[j][i]!=1) flag=0; 如果flag=1, 则R 是对称关系(4)关系的传递性判断方法:对任意i ,j ,k ,若111===ik jk ij r r r 有且。
C 语言算法:int i,j,k,flag=1;for(i=0;i<N && flag;i++)for(j=0;j<N && flag;j++)for(k=0;k<N && flag;k++)if(r[i][j] &&r[j][k] && r[i][k]!=1) flag=0; 如果flag=1, 则R 是传递关系(5)求商集的方法:商集是由等价类组成的集合。
已知R 是等价关系,下面的算法是把等价类分行打印出来。
C 语言算法:int i,j,flag=1;int a[N];for(i=0;i<N;i++)a[i]=i+1;/*i代表第i个元素*/for(i=0;i<N;i++){if(a[i]){printf("{ ");for(j=0;j<N;j++)if(r[i][j] && a[j]!=0){printf("%d ",a[j]);/*打印和第i个元素有关系的所有元素*/a[j]=0;}printf("}\n");}}实验五 关系闭包运算【实验目的】掌握求关系闭包的方法。
【实验内容】编程求一个关系的闭包,要求传递闭包用warshall 方法。
【实验原理和方法】设N 元关元系用r[N][N]表示,c[N][N]表示各个闭包,函数initc(r)表示将c[N][N]初始化为r[N][N]。
(1)自反闭包:A I R R r =)(。
C 语言算法: 将关系矩阵的对角线上所有元素设为1。
initc(r);/*将关系矩阵的对角线上所有元素设为1*/for(i=0;i<N;i++) c[i][i]=1;(2)对称闭包:R R R s '= )(C 语言算法: 在关系矩阵的基础上,若1,1==ji ij r r 令。
initc(r);for(i=0;i<N;i++)for(j=0;j<N;j++) if(c[i][j]) c[j][i]=1;/*将关系矩阵的对角线上所有元素设为1*/(3)传递闭包:n R R R R t 2)(=,或用warshall 方法。
方法1:n R R R R t 2)(=,下面求得的关系矩阵T=n n ij b ⨯)(就是)(R t 。
int b[N][N];initc(r);/*用c 装好r*/for(m=1;m<N;m++) /*得r 的m 次方,用c 装好*/{for(i=0;i<N;i++)for(j=0;j<N;j++){b[i][j]=0;for(k=0;k<N;k++)b[i][j]+=c[i][k]*r[k][j];if(b[i][j]) b[i][j]=1;} initc(b);/*把r 的m 次方b 赋给c 保存*/方法2:warshall方法initc(r);/*用c装好r*/for(i=0;i<N;i++)for(j=0;j<N;j++)if(c[j][i])for(k=0;k<N;k++){c[j][k]=c[j][k]+c[i][k];if(c[j][k]) c[j][k]=1;}实验六 欧拉图判定和应用【实验目的】掌握判断欧拉图的方法。