大连民族学院
计算机科学与工程学院实验报告
实验题目:判断关系的性质
课程名称:离散数学
实验类型:□演示性□验证性□操作性□设计性□综合性
专业:班级:学生姓名:学号:
实验日期:年月日实验地点:
实验学时:实验成绩:
指导教师签字:年月日
实验报告正文部分(具体要求详见实验报告格式要求)
实验报告格式
[实验题目] 判断关系的性质
[实验目的] 使学生掌握利用计算机语言实现判断关系性质的基本方法。
[实验环境] Microsoft Visual C++6.0
[实验原理]
实验内容与要求:对给定表示有穷集上关系的矩阵,确定这个关系是否是自反的或反自反的;对称的或反对称的;是否传递的。
通过二元关系与关系矩阵的联系,可以引入N维数组,以数组的运算来实现二元关系的判断。
图示:
程序源代码:
#include<stdio.h>
#define N 4
main()
{
int i,j,k;
int f,e,z;
int M[N][N];
printf("判断R是否为自反关系、对称关系、是否可传递?\n"); printf("请输入一个4*4的矩阵。
\n");
for(i=0;i<N;i++) /*输入一个4*4的矩阵*/
for(j=0;j<N;j++)
scanf("%d",&M[i][j]);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",M[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
if(M[i][i]==1)//判断自反性
{
if(i==N-1)
e=0;
else
;
}
else if(M[i][i]==0)//判断反自反性 {
if(i==N-1)
e=1;
else
;
}
else
{
e=2;
break;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(M[i][j]!=M[j][i])//判断对称性
{ f=1;
break;
}
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(M[i][j]==1)//判断反对称性
{
if(M[j][i]==0)
{
if(i==(N-1)&&j==N-1) f=0;
else
break;
}
}
}
if(f!=0&&f!=1)
{
f=2;
}
for(i=0;i<N;i++)//判断可传递性
for(j=0;j<N;j++)
if(M[i][j]==1)
continue;
else
for(k=0;k<N;k++)
if(M[i][k]*M[k][i]==0) continue;
else
z=0; if(e==0)
printf("关系R是自反关系\n");
else if(e==1)
printf("关系R是反自反关系\n");
else if(e==2)
printf("关系R是反自反关系\n");
if(f==0)
printf("关系R是反对称关系\n");
else if(f==1)
printf("关系R不是对称关系\n");
else if(f==2)
printf("关系R是对称关系\n");
if(z==0)
printf("关系R是不可传递关系\n"); else
printf("关系R是可传递关系\n");
}
[实验步骤]和[实验记录] 程序运行截图:
i、程序启动截图:
ii、程序输入截图:
ii、程序运行结果截图:
实验总结:实验简洁高效地判断二元关系的性质。
[思考与分析]。