C语言用数组实现集合的交集、并集、差集、补集

先上结果图:C语言用数组实现集合的交集、并集、差集、补集_第1张图片

 C语言用数组实现集合的交集、并集、差集、补集_第2张图片

 完整代码:

#include 
//初始化集合
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;
            }
        }
    }
}

你可能感兴趣的:(离散数学,c语言,数组)