本实验要求从键盘输入一个关系的关系矩阵,判断该关系是否是自反的、对称的、传递的、反自反的、反对称的。用C语言或MATLAB实现。
时间: 2023-12-17 16:04:15 浏览: 88
判断有序对的几种性质
以下是用C语言实现该功能的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int n, i, j;
int matrix[MAX_SIZE][MAX_SIZE];
int is_reflexive = 1, is_symmetric = 1, is_transitive = 1, is_antireflexive = 1, is_antisymmetric = 1;
printf("请输入关系的阶数:");
scanf("%d", &n);
printf("请输入关系的关系矩阵(0表示无关系,1表示有关系):\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 判断是否为自反的关系
for (i = 0; i < n; i++) {
if (matrix[i][i] == 0) {
is_reflexive = 0;
break;
}
}
// 判断是否为对称的关系
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (matrix[i][j] != matrix[j][i]) {
is_symmetric = 0;
break;
}
}
if (is_symmetric == 0) {
break;
}
}
// 判断是否为传递的关系
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (matrix[i][j] != 0) {
int k;
for (k = 0; k < n; k++) {
if (matrix[j][k] != 0 && matrix[i][k] == 0) {
is_transitive = 0;
break;
}
}
if (is_transitive == 0) {
break;
}
}
}
if (is_transitive == 0) {
break;
}
}
// 判断是否为反自反的关系
for (i = 0; i < n; i++) {
if (matrix[i][i] == 1) {
is_antireflexive = 0;
break;
}
}
// 判断是否为反对称的关系
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (matrix[i][j] == 1 && matrix[j][i] == 1) {
is_antisymmetric = 0;
break;
}
}
if (is_antisymmetric == 0) {
break;
}
}
// 输出结果
printf("该关系是否为自反的关系:%s\n", is_reflexive ? "是" : "否");
printf("该关系是否为对称的关系:%s\n", is_symmetric ? "是" : "否");
printf("该关系是否为传递的关系:%s\n", is_transitive ? "是" : "否");
printf("该关系是否为反自反的关系:%s\n", is_antireflexive ? "是" : "否");
printf("该关系是否为反对称的关系:%s\n", is_antisymmetric ? "是" : "否");
return 0;
}
```
该程序首先输入关系的阶数和关系矩阵,然后分别判断该关系是否为自反的、对称的、传递的、反自反的、反对称的,最后输出结果。
阅读全文