离散数学实验报告格式
玛丽莲梦兔
605次浏览
2021年01月30日 01:30
最佳经验
本文由作者推荐
经验总结-公司规章制度
《离散数学》实验报告
专
业
班
级
姓
名
学
号
授课教师
二
O
一
六
年
十二
月
目
录
实验一
联结词的运算
实验二
实验三
实验四
根据矩阵的乘法求复合关系
利用
warshall
算法求关系的传递闭包
图的可达矩阵实现
《离散数学》实验报告
实验一
联结词的运算
一.实验目的
通过上机实验操作,将命 题连接词运算融入到
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
的真值为真。
三.实验内容
编写一个程序实现非运算、合取运算、析取运算、异或运算、蕴涵运算、等价运算。
四.算法程序
#include
int main()
{
bool P=true,Q=false;
printf(
请选择运算方式
n
printf(
析取
n
printf(
合取
n
printf(
非
n
printf(
蕴含
n
printf(
等价
n
1
《离散数学》实验报告
int m;
scanf(
while( m>=1 && m<=4 )
{
printf(
请输入
P Q
的值
n
scanf(
int count = 1;
switch(m)
{
case 1:while( (count >= 1)&&(count < 4 ) )
{
}
break;
if(Q==0 && P==0)
printf(
析取
Q = 0n
else
printf(
析取
Q = 1n
count++;
if(count==4)
break;
printf(
请输入
P Q
的值
n
scanf(
case 2:while( (count >= 0)&&(count < 4 ) )
{
if(Q==1 && P==1)
printf(
合取
Q = 1n
else
printf(
合取
Q = 0n
count++;
if(count==4)
break;
printf(
请输入
P Q
的值
n
}
break;
scanf(
case 3:while( (count >= 0)&&(count < 4 ) )
{
if(Q==0)
printf(
非
Q = 1n
else
printf(
非
Q = 0n
2
《离散数学》实验报告
if(P==0)
printf(
非
P = 1n
else
printf(
非
P = 0n
count++;
if(count==4)
break;
}
break;
printf(
请输入
P Q
的值
n
scanf(
case 4:while( (count >= 0)&&(count < 4 ) )
{
if( Q==1 || (Q==0 && P==0))
printf(
蕴含
Q = 1n
else if(P==1 && Q==0)
printf(
蕴含
Q = 0n
count++;
if(count==4)
break;
}
break;
printf(
请输入
P Q
的值
n
scanf(
case 5:while( (count >= 0)&&(count < 4 ) )
{
if(P==Q)
printf(
等价
Q = 1n
else
printf(
等价
Q = 0n
count++;
if(count==4)
break;
}
return 0;
}
printf(
请重新选择运算方式
n
scanf(
printf(
请输入
P Q
的值
n
}
break;
scanf(
3
《离散数学》实验报告
}
五.实验结果
六.心得体会
通过将命题连接词运算融入到程序编写中,既加强我对命题连接词运算 的理解,又通
过编程实现命题连接词运算帮助我复习
C
语言知识,通过设计算法可以使 得数学中逻辑算
法用程序来实现,这样只要借助计算机的程序就可以很方便的将一些复杂的逻辑运算轻松
地解决。主函数中设计的代码虽然代码过长,但是结构明显,但是可以拆分为一个菜单函
数,和 一个指令输入函数,这样整体的机构更加简洁,方便代码的维护。
4
《离散数学》实验报告
实验二
根据矩阵的乘法求复合关系
一.实验目的
复合运算是一种重要的二元关系运算,
可用于二元关系的合成 ,
二元关系的性质判断,
二元关系传递闭包的运算等方面,通过编程实现二元关系的复合运算, 帮助同学们理解复
合运算的过程,复合形成新的二元关系中的序偶是如何产生的。
二.实验原理
复合运算能由两个二元关系生成一个新的二元关系。
设
X
→
Y(R
关系
)
,
Y
→
Z (S
关系
)
,则称
X
→
Z(
R
◦
S
关系
)
为
R
和
S
的复合关系,并规定
为 :
R
◦
S
={
∈
X
∧
z< br>∈
Z
∧
∃
y(y
∈
Y
∧
∈
R
∧
∈
S)}
关系可用矩阵表示, 故复合运算也可用矩阵表示。设有三个集合:
X={x
1
,x
2
…< br>
Y
Z
,
|X|=m,
|Y|=n,
|Z|=p,M
R
=[a
ik
]
m
×
n
,
x
m
},Y={y
1
,y
2
…
y
n
},Z={z
1
,z
2
…
z
p
},
X
M
S
=[a
kj
]
n
×
p
则复合关系
R
◦
S
的关系矩阵为:
M
R
◦
S
= M
R
◦
M
S
=[c
ij
]
m
×
p
c
(
a
b
)
ij
ik
kj
k
1
n
R
S
∨代表 逻辑加,满足
0
∨
0=0
,
0
∨
1=1,1
∨
0=1
,
1
∨
1=1
∧代表逻辑乘,满足
0
∧
0=0
,
0
∧
1=0,1
∧
0=0,
1
∧
1=1
三.实验内容
将二元关系用关系矩阵 表示,通过两个关系矩阵对应行列元素先进行逻辑乘,后进行
逻辑加生成新的关系矩阵中的每一个元素。 新的关系矩阵所对应的二元关系就是两个二元
关系复合形成的,编程实现这一复合过程。
四.算法程序
#include
#define N 100
int main()
{
int n,m,r;
printf(
请输入
n,m,r
的值:
scanf(
int i,j,s;
int R[N][N],S[N][N];
printf(
输入
R
的序偶
:n
5
《离散数学》实验报告
for(i=0;i
for(j=0;j
}
scanf(
if(R[i][j]!=0 && R[i][j]!=1)
R[i][j] = 0;
printf(
输入
S
的序偶
:n
for(j=0;j
int RS[N][N];
for(i=0;i
for(s=0;s
{
}
int sum = 0;
for(j=0;j
{
}
sum += R[i][j] * S[j][s];
if(sum != 0)
RS[i][s] = 1;
for(s=0;s
}
scanf(
if(S[j][s]!=0 && S[j][s]!=1)
S[j][s] = 0;
else
RS[i][s] = 0;
printf(
的矩阵是
:n
for(i=0;i
}
printf(
的矩阵是
:n
for(j=0;j
printf(
printf(
6