1.【实验目的】
对称:
通过算法设计并编程实现对给定集合上的关系是否为对称关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断关系性质的方法
自反:
通过算法设计并编程实现对给定集合上的关系是否为自反关系的判断,加深学生对关系性质的理解,掌握用矩阵来判断关系性质的方法。
2.【实验内容】
已知关系R 由关系矩阵M 给出,要求判断由M 表示的这个关系是否为对称关
系。
假定R 的关系矩阵为:⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛=1234210330124321M 3.【实验要求】
C 语言编程实现
4.【算法描述】
对称:
从给定的关系矩阵来判断关系R 是否为对称是很容易的。
若M (R 的关系矩阵)为对称矩阵,则R 是对称关系;若M 为反对称矩阵,则R 是反对称关系。
因为R 为对称的是等价关系的必要条件,所以,本算法可以作为判等价关系算法的子程序给出。
算法实现:
(1) 输入关系矩阵M (M 为n 阶方阵);
(2) 判断对称性,对于i=2,3,….,n ;j=1,2,……,i-1,若存在m ij =m ji ,
则R 是对称的;
(3) 判断反对称性;
(4) 判断既是对称的又是反对称的;
(5) 判断既不是对称的又不是反对称的;
(6) 输出判断结果。
自反:
从给定的关系矩阵来断判关系R是否为自反是很容易的。
若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)的主对角线元素均为0,则R是反自反关系;若M(R的关系矩阵)的主对角线元素既有1又有0,则R既不是自反关系也不是反自反关系。
本算法可以作为判等价关系算法的子程序给出。
算法实现
(1)输入关系矩阵M(M为n阶方阵)。
(2)判断自反性,对于i=1,2,….,n;若存在m
=0,则R不是自反
ii
=1,则R是自反的;否则R既不是自反关系也不是的;若存在m
ii
反自反关系。
(3)输出判断结果。
源代码
#include<stdio.h>
void z();
void r();
void main()
{
int d;
while(d)
{
printf("欢迎使用关系性质的判断系统\n\n 1. 对称关系的判断 2. 自反关系的判断\n\n请输入选项:");
scanf("%d",&d);
switch(d){
case 1: r();break;
case 2: z();break;
case 0: break;
}
printf("\n");
printf("是否还继续?是请输入1,否请输入0:");
scanf("%d",&d);
printf("\n\n");
}return 0;
}
void r()
{
int a[30][30];
int m,n,i,j,c,b,d;
c=0;
d=0;
b=0;
d=1;
printf("请输入矩阵的行数");
scanf("%d",&m);
printf("请输入矩阵的列数");
scanf("%d",&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("请输入矩阵关系中第%d行第%d列的数字:",i,j);
scanf("%d",&a[i][j]);
}
}
printf("关系矩阵M为:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]!=a[j][i])
{
c=1;
break;
}
}
}
if(c==0)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++){
if(a[i][j]==1){
if(a[j][i]!=0){
c=2;
break;
}
}
}
}
if(c==2) printf("该矩阵是对称性的\n");
else
if(c==0) printf("该矩阵是既对称又反对称的\n");
}
else
if(c==1){
for(i=0;i<m;i++){
for(j=0;j<n;j++){
if(a[i][j]==1){
if(a[j][i]!=0){
c=2;
break;
}
}
}
}
if(c==2) printf("该矩阵不是对称的又不是反对称的\n");
else{
printf("该矩阵是反对称性的\n");
}
}}
void z()
{
int m,n,i,j,a[80][80],c;
c=0;
printf("请输入矩阵的行数");
scanf("%d",&m);
printf("请输入矩阵的列数");
scanf("%d",&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("请输入矩阵关系中第%d行第%d列的数字:",i,j);
scanf("%d",&a[i][j]);
}
}
printf("关系矩阵M为:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
for(i=0;i<m;i++){
if(a[i][i]!=0){
c=1;break;
}
}
if(c==1) printf("该矩阵是自反性的\n");
if(c==0) printf("该矩阵是反自反性的\n"); }。