本实验要求从键盘输入一个关系的关系矩阵,判断该关系是否是自反的、对称的、传递的、反自反的、反对称的。用C语言或MATLAB实现。
时间: 2023-12-14 07:36:08 浏览: 120
以下是C语言实现:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入关系矩阵的维数:");
scanf("%d", &n);
int matrix[n][n];
printf("请按行输入关系矩阵(用空格隔开):\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 判断自反性
int reflexivity = 1;
for (int i = 0; i < n; i++) {
if (!matrix[i][i]) {
reflexivity = 0;
break;
}
}
if (reflexivity) {
printf("该关系是自反的。\n");
} else {
printf("该关系不是自反的。\n");
}
// 判断对称性
int symmetry = 1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (matrix[i][j] != matrix[j][i]) {
symmetry = 0;
break;
}
}
if (!symmetry) {
break;
}
}
if (symmetry) {
printf("该关系是对称的。\n");
} else {
printf("该关系不是对称的。\n");
}
// 判断传递性
int transitivity = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j]) {
for (int k = 0; k < n; k++) {
if (matrix[j][k] && !matrix[i][k]) {
transitivity = 0;
break;
}
}
if (!transitivity) {
break;
}
}
}
if (!transitivity) {
break;
}
}
if (transitivity) {
printf("该关系是传递的。\n");
} else {
printf("该关系不是传递的。\n");
}
// 判断反自反性
int irreflexivity = 1;
for (int i = 0; i < n; i++) {
if (matrix[i][i]) {
irreflexivity = 0;
break;
}
}
if (irreflexivity) {
printf("该关系是反自反的。\n");
} else {
printf("该关系不是反自反的。\n");
}
// 判断反对称性
int asymmetry = 1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (matrix[i][j] && matrix[j][i] && i != j) {
asymmetry = 0;
break;
}
}
if (!asymmetry) {
break;
}
}
if (asymmetry) {
printf("该关系是反对称的。\n");
} else {
printf("该关系不是反对称的。\n");
}
return 0;
}
```
程序首先要求输入关系矩阵的维数和关系矩阵,并且依次判断关系的自反性、对称性、传递性、反自反性、反对称性,输出相应的结果。
阅读全文