编制一个能执行集合的并、交、差运算的程序。集合中的元素限定为小写字母字符['a','b',…,'z']。要求:设计集合的并,交,差运算函数,演示程序以用户和计算机对话的方式执行,用c语言
时间: 2023-05-13 07:04:31 浏览: 89
非常感谢您的提问!以下是一个能执行集合的并、交、差运算的程序的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SET_SIZE 26
typedef struct Set {
char elements[MAX_SET_SIZE];
int size;
} Set;
void initSet(Set *set) {
set->size = 0;
}
void addElement(Set *set, char element) {
if (set->size < MAX_SET_SIZE) {
set->elements[set->size++] = element;
}
}
void removeElement(Set *set, char element) {
int i;
for (i = 0; i < set->size; i++) {
if (set->elements[i] == element) {
set->elements[i] = set->elements[--set->size];
break;
}
}
}
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");
}
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 intersectSet(Set *set1, Set *set2, Set *result) {
int i;
initSet(result);
for (i = 0; i < set1->size; i++) {
if (strchr(set2->elements, set1->elements[i]) != NULL) {
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 (strchr(set2->elements, set1->elements[i]) == NULL) {
addElement(result, set1->elements[i]);
}
}
}
int main() {
Set set1, set2, result;
char operation;
int i;
initSet(&set1);
initSet(&set2);
initSet(&result);
printf("请输入集合1的元素,以空格分隔:");
char input[100];
fgets(input, 100, stdin);
char *token = strtok(input, " ");
while (token != NULL) {
addElement(&set1, token[0]);
token = strtok(NULL, " ");
}
printf("集合1为:");
printSet(&set1);
printf("请输入集合2的元素,以空格分隔:");
fgets(input, 100, stdin);
token = strtok(input, " ");
while (token != NULL) {
addElement(&set2, token[0]);
token = strtok(NULL, " ");
}
printf("集合2为:");
printSet(&set2);
while (1) {
printf("请输入要执行的集合运算(并:U,交:I,差:D),或输入Q退出:");
scanf("%c", &operation);
getchar();
if (operation == 'Q') {
break;
}
switch (operation) {
case 'U':
unionSet(&set1, &set2, &result);
printf("集合1和集合2的并为:");
printSet(&result);
break;
case 'I':
intersectSet(&set1, &set2, &result);
printf("集合1和集合2的交为:");
printSet(&result);
break;
case 'D':
differenceSet(&set1, &set2, &result);
printf("集合1和集合2的差为:");
printSet(&result);
break;
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
希望这个程序能够满足您的需求!如果您有任何问题或建议,请随时告诉我。
阅读全文