用简单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-21 10:01:41 浏览: 142
用于处理数据,求两个集合的交集、并集、补集。附源码。
好的,我来回答你的问题。
首先,我们可以使用二维数组来表示关系R和S,其中第一个元素表示关系中的第一个元素,第二个元素表示关系中的第二个元素。比如,我们可以这样定义关系R和S:
```c
int R[7][2] = {{1, 2}, {2, 3}, {3, 2}, {3, 4}, {1, 4}, {4, 2}, {4, 4}};
int S[4][2] = {{1, 1}, {3, 3}, {3, 2}, {3, 4}};
```
接下来,我们可以定义函数来求R和S的并集、交集和差集。
求并集的函数可以这样实现:
```c
void unionSet(int A[][2], int n, int B[][2], int m, int C[][2], int *len)
{
int i, j;
for (i = 0; i < n; i++) {
C[i][0] = A[i][0];
C[i][1] = A[i][1];
}
*len = n;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (B[i][0] == A[j][0] && B[i][1] == A[j][1]) {
break;
}
}
if (j == n) {
C[*len][0] = B[i][0];
C[*len][1] = B[i][1];
(*len)++;
}
}
}
```
这个函数的思路是先将数组A中的元素复制到结果数组C中,然后遍历数组B,如果B中的元素在A中不存在,则将该元素加入到结果数组C中。
求交集的函数可以这样实现:
```c
void intersectSet(int A[][2], int n, int B[][2], int m, int C[][2], int *len)
{
int i, j;
*len = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (A[i][0] == B[j][0] && A[i][1] == B[j][1]) {
C[*len][0] = A[i][0];
C[*len][1] = A[i][1];
(*len)++;
break;
}
}
}
}
```
这个函数的思路是遍历数组A和B,如果A中的元素在B中也存在,则将该元素加入到结果数组C中。
求差集的函数可以这样实现:
```c
void diffSet(int A[][2], int n, int B[][2], int m, int C[][2], int *len)
{
int i, j;
*len = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
if (A[i][0] == B[j][0] && A[i][1] == B[j][1]) {
break;
}
}
if (j == m) {
C[*len][0] = A[i][0];
C[*len][1] = A[i][1];
(*len)++;
}
}
}
```
这个函数的思路是遍历数组A,如果A中的元素在B中不存在,则将该元素加入到结果数组C中。
最后,我们可以在主函数中调用这些函数来求R和S的并集、交集和差集:
```c
int main()
{
int R[7][2] = {{1, 2}, {2, 3}, {3, 2}, {3, 4}, {1, 4}, {4, 2}, {4, 4}};
int S[4][2] = {{1, 1}, {3, 3}, {3, 2}, {3, 4}};
int U[11][2], I[2][2], D[7][2];
int uLen, iLen, dLen;
unionSet(R, 7, S, 4, U, &uLen);
intersectSet(R, 7, S, 4, I, &iLen);
diffSet(R, 7, S, 4, D, &dLen);
printf("R ∪ S = {");
for (int i = 0; i < uLen; i++) {
printf("<%d, %d>", U[i][0], U[i][1]);
if (i < uLen - 1) {
printf(", ");
}
}
printf("}\n");
printf("R ∩ S = {");
for (int i = 0; i < iLen; i++) {
printf("<%d, %d>", I[i][0], I[i][1]);
if (i < iLen - 1) {
printf(", ");
}
}
printf("}\n");
printf("R - S = {");
for (int i = 0; i < dLen; i++) {
printf("<%d, %d>", D[i][0], D[i][1]);
if (i < dLen - 1) {
printf(", ");
}
}
printf("}\n");
return 0;
}
```
输出结果为:
```
R ∪ S = {<1, 2>, <2, 3>, <3, 2>, <3, 4>, <1, 4>, <4, 2>, <4, 4>, <1, 1>, <3, 3>}
R ∩ S = {<3, 2>, <3, 4>}
R - S = {<1, 2>, <2, 3>, <1, 4>, <4, 2>, <4, 4>}
```
希望能对你有所帮助!
阅读全文