先上结果图:
完整代码:
#include <stdio.h>
//初始化集合
int a[1024] = {0}, b[1024] = {0}, c[1024] = {0}, d[1024] = {0}, e[1024] = {0};
int com[1024] = {0}, temp[1024] = {0}, temp1[1024] = {0};
//显示界面
void show()
{
printf("\t**************集合操作界面**************\n");
printf("\t\t**** 1-**请先输入集合A和B元素在进行以下操作******\n");
printf("\t\t**** 2-**求集合A∩B******\n");
printf("\t\t**** 3-**求集合AUB******\n");
printf("\t\t**** 4-**求集合A-B******\n");
printf("\t\t**** 5-**求集合CeA******\n");
printf("\t\t**** 0-**退出操作页面******\n");
printf("\t******************************************\n");
}
//集合AB元素的填充
void input(int x, int y)
{
int i, j;
printf("请输入A中元素:\n");
for (i = 0; i < x; i++)
{
scanf("%d", &a[i]);
getchar();
for (j = 0; j < i; j++)
{
if (a[i] == a[j])
{
printf("出现重复元素");
a[i] = 0;
}
}
}
printf("请输入B中元素:\n");
for (i = 0; i < y; i++)
{
scanf("%d", &b[i]);
getchar();
for (j = 0; j < i; j++)
{
if (b[i] == b[j])
{
printf("出现重复元素");
b[i] = 0;
}
}
}
}
//集合A,B的交集
int Mixed(int x, int y)
{
int i, j, k = 0;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
if (a[i] == b[j])
{ //检测AB集合之间的相同元素
c[k] = a[i]; //将相同的元素给空集合保存
k++; //统计c集合中的总个数
}
}
}
printf("A∩B={");
for (i = 0; i < k - 1; i++)
{ //k-1作用:预留一个位置
printf(" %d,", c[i]);
}
printf(" %d}\n", c[k - 1]); //输出最后一个元素并附上 }
getchar();
}
//集合A,B的并集
int Union(int x, int y)
{
int i, j, k = 0, m = 0, n;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
if (a[i] == b[j])
{ //检测AB集合之间的相同元素
c[k] = a[i]; //将相同的元素给空集合保存
k++; //统计c集合中的总个数
}
}
}
for (i = 0; i < x; i++)
{ //将A集合元素放在com集合中
com[m] = a[i];
m++;
}
for (i = 0; i < y; i++)
{ //将B集合元素放在com集合中
com[m] = b[i];
m++;
}
for (i = 0; i < x + y - k; i++)
{ //x+y-k为A,B集合所有元素去掉相同元素的总数
for (j = i + 1; j < m; j++)
{ //
if (com[j] == com[i])
{
for (n = j; n < m; n++)
{
com[n] = com[n + 1];
}
break;
}
}
}
printf("AUB={");
for (i = 0; i < x + y - k - 1; i++)
{
printf(" %d,", com[i]);
}
printf(" %d}\n", com[x + y - k - 1]);
getchar();
}
//集合A,B的差运算
int Difference(int x, int y)
{
int i, j, k = 0;
int m;
for (i = 0; i < x; i++)
{
for (j = 0; j < y; j++)
{
if (a[i] == b[j])
{
c[k] = a[i];
k++;
}
}
} //以上为交集部分,得出A,B集合中相同元素的总数
for (i = 0; i < x; i++)
{ //将A集合元素放在D集合中
d[i] = a[i];
}
for (i = 0; i < x - k; i++)
{ //去掉相同元素的个数,进行循环
for (j = 0; j < k; j++)
{
if (d[i] == c[j]) //用D集合中的元素与A,B的交集集合C比较元素
{
for (m = i; m < x; m++)
{ //如果D集合中第i各元素与集合C相同,则i后的元素前移一位
d[m] = d[m + 1];
}
i--;
break;
}
}
}
printf("A-B={");
for (i = 0; i < x - k - 1; i++)
{
printf(" %d,", d[i]); //输出差集
}
printf(" %d}\n", d[x - k - 1]); //附上 }
getchar();
}
//集合E的填充
void inputE(int elngth)
{
int i, j;
printf("请输入E中元素:\n");
for (i = 0; i < elngth; i++)
{
scanf("%d", &e[i]);
getchar();
for (j = 0; j < i; j++)
{
if (e[i] == e[j])
{
printf("出现重复元素");
e[i] = 0;
}
}
}
}
//集合A的补集E
int Left(int x, int elength)
{ //与差集相同
if (elength < x)
{
printf("E元素数应大于A中元素数\n");
return 0;
}
int i, j, k = 0, m = 0;
for (i = 0; i < elength; i++)
{
for (j = 0; j < x; j++)
{
if (e[i] == a[j])
{
temp1[k] = e[i];
k++;
}
}
}
for (i = 0; i < elength; i++)
{
temp[i] = e[i];
}
for (i = 0; i < elength - k; i++)//去掉相同元素的个数,进行循环
{
for (j = 0; j < k; j++)
{
if (temp[i] == temp1[j]) //用E集合中的元素与A,E的交集比较元素
{
for (m = i; m < elength; m++)
{
temp[m] = temp[m + 1];
}
i--;
break;
}
}
}
printf("CeA={");
for (i = 0; i < elength - k - 1; i++)
{
printf(" %d,", temp[i]); //输出补集
}
printf(" %d}\n", temp[elength - k - 1]); //附上 }
//getchar();
}
//主函数
int main()
{
int x, y, elngth, choice;
while (1)
{
show();
printf("请输入操作数字:\n");
scanf("%d", &choice);
if (choice == 0)
{
printf("退出操作页面\n");
return 0;
}
else
{
switch (choice)
{
case 1:
printf("请输入A,B集合元素数\n");
scanf("%d %d", &x, &y);
input(x, y);
printf("请按回车继续!\n");
getchar();
break;
case 2:
Mixed(x, y);
printf("请按回车继续!\n");
getchar();
break;
case 3:
Union(x, y);
printf("请按回车继续!\n");
getchar();
break;
case 4:
Difference(x, y);
printf("请按回车继续!\n");
getchar();
break;
case 5:
printf("A集合的长度:%d\n", x);
printf("请输入集合E元素数:\n");
scanf("%d", &elngth);
inputE(elngth);
Left(x, elngth);
printf("请按回车继续!\n");
getchar();
break;
default:
break;
}
}
}
}