问题描述:编制一个能演示执行集合的并、交和差运算的程序 基本要求:集合元素限定为小写字母[’a’…’z’];演示程序以用户和计算机对话方式执行。集合的输入形式 为一个以“回车符”为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法 字符,程序运用时自动过滤去,输出的运算结果中将不含重复字符和非法字符。计算机终端 中显示提示信息之后,由用户自行选择下一步命令,相应输入数据和运算结果在其后显示。数据测试: (1)Set1=”magazine”, Set2=’paper”, Set1∪Set2=”aegimnprz”,Set1∩Set2=”ae”,Set1-Set2=”gimnz”; (2) Set1=”012oper4a6tion89”,Set2=”error data”, Set1∪Set2=”adeinoprt”,Set1∩Set2=”aeort”, Set1-Set2=”inp”.
时间: 2024-03-11 22:48:37 浏览: 59
好的,以下是一个基于C语言的程序,可以实现集合的并、交、差运算,并使用用户和计算机对话方式执行。
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 26
void inputSet(char* set);
void printSet(char* set);
void unionSet(char* set1, char* set2, char* res);
void intersectSet(char* set1, char* set2, char* res);
void diffSet(char* set1, char* set2, char* res);
int main() {
char set1[MAX_SIZE + 1], set2[MAX_SIZE + 1], res[MAX_SIZE + 1];
int choice;
printf("集合运算演示程序\n");
while (1) {
printf("\n请选择要进行的集合运算:\n");
printf("1. 并集\n");
printf("2. 交集\n");
printf("3. 差集\n");
printf("4. 退出程序\n");
printf("请输入数字(1-4)选择操作:");
scanf("%d", &choice);
while (getchar() != '\n') ; // 清空输入缓冲区
switch (choice) {
case 1:
printf("\n请输入第一个集合:");
inputSet(set1);
printf("请输入第二个集合:");
inputSet(set2);
unionSet(set1, set2, res);
printf("两个集合的并集为:");
printSet(res);
break;
case 2:
printf("\n请输入第一个集合:");
inputSet(set1);
printf("请输入第二个集合:");
inputSet(set2);
intersectSet(set1, set2, res);
printf("两个集合的交集为:");
printSet(res);
break;
case 3:
printf("\n请输入第一个集合:");
inputSet(set1);
printf("请输入第二个集合:");
inputSet(set2);
diffSet(set1, set2, res);
printf("两个集合的差集为:");
printSet(res);
break;
case 4:
printf("\n程序已退出!\n");
return 0;
default:
printf("\n输入错误,请重新输入!\n");
}
}
}
// 输入集合
void inputSet(char* set) {
char c;
int i, j;
i = 0;
while ((c = getchar()) != '\n') {
if (c >= 'a' && c <= 'z') {
// 过滤重复字符
for (j = 0; j < i; j++) {
if (set[j] == c) {
break;
}
}
if (j == i) {
set[i++] = c;
}
}
}
set[i] = '\0';
}
// 打印集合
void printSet(char* set) {
int i;
if (strlen(set) == 0) {
printf("空集\n");
} else {
printf("{ ");
for (i = 0; i < strlen(set); i++) {
printf("%c ", set[i]);
}
printf("}\n");
}
}
// 求并集
void unionSet(char* set1, char* set2, char* res) {
int i, j;
// 将第一个集合复制到结果集中
strcpy(res, set1);
// 将第二个集合中不在结果集中的元素添加到结果集中
for (i = 0; i < strlen(set2); i++) {
for (j = 0; j < strlen(res); j++) {
if (set2[i] == res[j]) {
break;
}
}
if (j == strlen(res)) {
res[strlen(res)] = set2[i];
res[strlen(res) + 1] = '\0';
}
}
}
// 求交集
void intersectSet(char* set1, char* set2, char* res) {
int i, j, k;
k = 0;
for (i = 0; i < strlen(set1); i++) {
for (j = 0; j < strlen(set2); j++) {
if (set1[i] == set2[j]) {
res[k++] = set1[i];
break;
}
}
}
res[k] = '\0';
}
// 求差集
void diffSet(char* set1, char* set2, char* res) {
int i, j, k;
k = 0;
for (i = 0; i < strlen(set1); i++) {
for (j = 0; j < strlen(set2); j++) {
if (set1[i] == set2[j]) {
break;
}
}
if (j == strlen(set2)) {
res[k++] = set1[i];
}
}
res[k] = '\0';
}
```
你可以使用上面提供的程序,来测试你的数据。希望能对你有所帮助。
阅读全文