给定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语言
时间: 2023-08-19 07:03:54 浏览: 146
好的,下面是使用简单的 C 语言代码实现 R 和 S 的并集、交集、差集的算法:
```c
#include <stdio.h>
int main() {
// 定义集合 A 和关系 R
int A[4] = {1, 2, 3, 4};
int R[7][2] = {{1, 2}, {2, 3}, {3, 2}, {3, 4}, {1, 4}, {4, 2}, {4, 4}};
// 定义集合 S 和关系 S
int S[4][2] = {{1, 1}, {3, 3}, {3, 2}, {3, 4}};
// 计算 R 和 S 的并集
int R_union_S[11][2];
int R_size = 7, S_size = 4, R_union_S_size = R_size + S_size;
for (int i = 0; i < R_size; i++) {
R_union_S[i][0] = R[i][0];
R_union_S[i][1] = R[i][1];
}
for (int i = 0; i < S_size; i++) {
int is_duplicate = 0;
for (int j = 0; j < R_size; j++) {
if (S[i][0] == R[j][0] && S[i][1] == R[j][1]) {
is_duplicate = 1;
break;
}
}
if (!is_duplicate) {
R_union_S[R_size + i][0] = S[i][0];
R_union_S[R_size + i][1] = S[i][1];
}
}
printf("R ∪ S = {");
for (int i = 0; i < R_union_S_size; i++) {
printf("<%d,%d>", R_union_S[i][0], R_union_S[i][1]);
if (i < R_union_S_size - 1) printf(", ");
}
printf("}\n");
// 计算 R 和 S 的交集
int R_intersection_S[2][2];
int R_intersection_S_size = 0;
for (int i = 0; i < R_size; i++) {
for (int j = 0; j < S_size; j++) {
if (R[i][0] == S[j][0] && R[i][1] == S[j][1]) {
R_intersection_S[R_intersection_S_size][0] = R[i][0];
R_intersection_S[R_intersection_S_size][1] = R[i][1];
R_intersection_S_size++;
}
}
}
printf("R ∩ S = {");
for (int i = 0; i < R_intersection_S_size; i++) {
printf("<%d,%d>", R_intersection_S[i][0], R_intersection_S[i][1]);
if (i < R_intersection_S_size - 1) printf(", ");
}
printf("}\n");
// 计算 R 和 S 的差集
int R_difference_S[7][2];
int R_difference_S_size = 0;
for (int i = 0; i < R_size; i++) {
int is_duplicate = 0;
for (int j = 0; j < S_size; j++) {
if (R[i][0] == S[j][0] && R[i][1] == S[j][1]) {
is_duplicate = 1;
break;
}
}
if (!is_duplicate) {
R_difference_S[R_difference_S_size][0] = R[i][0];
R_difference_S[R_difference_S_size][1] = R[i][1];
R_difference_S_size++;
}
}
printf("R - S = {");
for (int i = 0; i < R_difference_S_size; i++) {
printf("<%d,%d>", R_difference_S[i][0], R_difference_S[i][1]);
if (i < R_difference_S_size - 1) printf(", ");
}
printf("}\n");
return 0;
}
```
上述代码中,我们先定义了集合 A 和关系 R,以及集合 S 和关系 S。然后,我们分别计算 R 和 S 的并集、交集、差集,并输出结果。
其中,计算 R 和 S 的并集的算法如下:
1. 首先将 R 中的所有元素加入并集集合 R_union_S 中;
2. 然后遍历 S 中的每个元素,如果该元素不在 R 中,则将其加入 R_union_S 中。
计算 R 和 S 的交集的算法如下:
1. 遍历 R 中的每个元素,同时遍历 S 中的每个元素;
2. 如果 R 中的某个元素和 S 中的某个元素相等,则将该元素加入交集集合 R_intersection_S 中。
计算 R 和 S 的差集的算法如下:
1. 遍历 R 中的每个元素,同时遍历 S 中的每个元素;
2. 如果 R 中的某个元素不在 S 中,则将该元素加入差集集合 R_difference_S 中。
以上就是使用简单的 C 语言代码实现 R 和 S 的并集、交集、差集的算法。
阅读全文