用c语言编写一个能执行集合的并、交、差运算的程序,集合的元素限定为小写字母字符
时间: 2023-06-11 22:07:34 浏览: 141
以下是一个简单的C语言程序,实现了集合的并、交、差运算:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 26
typedef struct set {
int size;
char elements[MAX_SIZE];
} Set;
/* 初始化集合 */
void initSet(Set *set) {
set->size = 0;
memset(set->elements, 0, MAX_SIZE * sizeof(char));
}
/* 添加元素到集合 */
void addElement(Set *set, char element) {
if (set->size < MAX_SIZE && !containsElement(set, element)) {
set->elements[set->size++] = element;
}
}
/* 从集合中移除元素 */
void removeElement(Set *set, char element) {
int i, j;
for (i = 0; i < set->size; i++) {
if (set->elements[i] == element) {
for (j = i; j < set->size - 1; j++) {
set->elements[j] = set->elements[j + 1];
}
set->size--;
break;
}
}
}
/* 判断集合是否包含某个元素 */
int containsElement(Set *set, char element) {
int i;
for (i = 0; i < set->size; i++) {
if (set->elements[i] == element) {
return 1;
}
}
return 0;
}
/* 集合的并运算 */
void unionSet(Set *set1, Set *set2, Set *result) {
int i;
initSet(result);
for (i = 0; i < set1->size; i++) {
addElement(result, set1->elements[i]);
}
for (i = 0; i < set2->size; i++) {
addElement(result, set2->elements[i]);
}
}
/* 集合的交运算 */
void intersectionSet(Set *set1, Set *set2, Set *result) {
int i;
initSet(result);
for (i = 0; i < set1->size; i++) {
if (containsElement(set2, set1->elements[i])) {
addElement(result, set1->elements[i]);
}
}
}
/* 集合的差运算 */
void differenceSet(Set *set1, Set *set2, Set *result) {
int i;
initSet(result);
for (i = 0; i < set1->size; i++) {
if (!containsElement(set2, set1->elements[i])) {
addElement(result, set1->elements[i]);
}
}
}
/* 打印集合 */
void printSet(Set *set) {
int i;
printf("{");
for (i = 0; i < set->size; i++) {
printf("%c", set->elements[i]);
if (i < set->size - 1) {
printf(", ");
}
}
printf("}\n");
}
int main() {
Set set1, set2, resultSet;
char element;
int i;
/* 初始化集合 */
initSet(&set1);
initSet(&set2);
/* 添加元素到集合 */
printf("Enter elements of set 1 (a-z, enter '.' to end):\n");
while (1) {
scanf("%c", &element);
if (element == '.') {
break;
}
addElement(&set1, element);
}
getchar(); /* 消耗掉输入缓冲区中的换行符 */
printf("Enter elements of set 2 (a-z, enter '.' to end):\n");
while (1) {
scanf("%c", &element);
if (element == '.') {
break;
}
addElement(&set2, element);
}
getchar(); /* 消耗掉输入缓冲区中的换行符 */
/* 集合的并运算 */
unionSet(&set1, &set2, &resultSet);
printf("Union of set 1 and set 2:\n");
printSet(&resultSet);
/* 集合的交运算 */
intersectionSet(&set1, &set2, &resultSet);
printf("Intersection of set 1 and set 2:\n");
printSet(&resultSet);
/* 集合的差运算 */
differenceSet(&set1, &set2, &resultSet);
printf("Difference of set 1 and set 2:\n");
printSet(&resultSet);
return 0;
}
```
编译运行后,程序会要求输入两个集合,每个集合的元素用小写字母表示,直到输入一个“.”表示输入结束。然后程序会依次输出这两个集合的并、交、差运算结果。
阅读全文