本实验要求从键盘输入一个关系的关系矩阵,判断该关系是否是自反的、对称的、传递的、反自反的、反对称的。用C语言或MATLAB实现。
时间: 2023-12-14 07:35:55 浏览: 70
以下是用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 is_reflexive = 1;
for (int i = 0; i < n; i++) {
if (matrix[i][i] == 0) {
is_reflexive = 0;
break;
}
}
if (is_reflexive) {
printf("该关系是自反的。\n");
} else {
printf("该关系不是自反的。\n");
}
// 判断对称
int is_symmetric = 1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (matrix[i][j] != matrix[j][i]) {
is_symmetric = 0;
break;
}
}
if (!is_symmetric) {
break;
}
}
if (is_symmetric) {
printf("该关系是对称的。\n");
} else {
printf("该关系不是对称的。\n");
}
// 判断传递
int is_transitive = 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]) {
is_transitive = 0;
break;
}
}
}
if (!is_transitive) {
break;
}
}
if (!is_transitive) {
break;
}
}
if (is_transitive) {
printf("该关系是传递的。\n");
} else {
printf("该关系不是传递的。\n");
}
// 判断反自反
int is_antireflexive = 1;
for (int i = 0; i < n; i++) {
if (matrix[i][i] == 1) {
is_antireflexive = 0;
break;
}
}
if (is_antireflexive) {
printf("该关系是反自反的。\n");
} else {
printf("该关系不是反自反的。\n");
}
// 判断反对称
int is_antisymmetric = 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) {
is_antisymmetric = 0;
break;
}
}
if (!is_antisymmetric) {
break;
}
}
if (is_antisymmetric) {
printf("该关系是反对称的。\n");
} else {
printf("该关系不是反对称的。\n");
}
return 0;
}
```
用户需要按照提示输入矩阵的维数和元素,程序会逐一判断该关系是否是自反的、对称的、传递的、反自反的、反对称的,并输出相应的结果。
其中,自反指每个元素与自身都有该关系;对称指若a与b有该关系,则b与a也有该关系;传递指若a与b有该关系,b与c有该关系,则a与c也有该关系;反自反指每个元素与自身都没有该关系;反对称指若a与b有该关系且b与a有该关系,则a与b是同一个元素。
阅读全文