用C语言写给定A={1,2,3,4}上的关系R={<1,2>,<2,3>,<3,2>,<3,4>,<1,4>,<4,2>,<4,4>},S={<1,1>,<3,3>,<3,2>,<3,4>},求R和S的并集、交集、差集(相对补集)。
时间: 2023-08-20 20:05:07 浏览: 120
给定A={1,2,3,4}上的关系R={<1,2>,<2,3>,<3,2>,<3,4>,<1,4>,<4,2>,<4,4>},S={<1,1>,<3,3>,<3,2>,<3,4>},求R和S的并集、交集、差集(相对补集)。
首先,需要定义一个结构体来表示关系。
```c
typedef struct {
int x;
int y;
} Relation;
```
然后,定义函数来判断两个关系是否相等。
```c
int isEqual(Relation r1, Relation r2) {
return r1.x == r2.x && r1.y == r2.y;
}
```
接着,定义函数来求两个关系的并集。
```c
void unionOfRelation(Relation r1[], int len1, Relation r2[], int len2) {
int i, j, flag;
for (i = 0; i < len2; i++) {
flag = 0;
for (j = 0; j < len1; j++) {
if (isEqual(r1[j], r2[i])) {
flag = 1;
break;
}
}
if (!flag) {
r1[len1++] = r2[i];
}
}
}
```
接下来,定义函数来求两个关系的交集。
```c
void intersectionOfRelation(Relation r1[], int len1, Relation r2[], int len2) {
int i, j, k = 0;
for (i = 0; i < len1; i++) {
for (j = 0; j < len2; j++) {
if (isEqual(r1[i], r2[j])) {
r1[k++] = r1[i];
break;
}
}
}
len1 = k;
}
```
最后,定义函数来求两个关系的差集(相对补集)。
```c
void differenceOfRelation(Relation r1[], int len1, Relation r2[], int len2) {
int i, j, k = 0, flag;
for (i = 0; i < len1; i++) {
flag = 0;
for (j = 0; j < len2; j++) {
if (isEqual(r1[i], r2[j])) {
flag = 1;
break;
}
}
if (!flag) {
r1[k++] = r1[i];
}
}
len1 = k;
}
```
最后,将上述函数组合起来即可求出R和S的并集、交集、差集(相对补集)。
阅读全文