c语言求交、并、补、对称差

c语言求交、并、补、对称差

#include <stdio.h>
#include <stdlib.h>
#define N 50
//求并集,ab是两个集合lengtha是a的长度
void bing(float a[],int lengtha,float b[],int lengthb)
{
    float c[N]= {0};
    int m,j,i;
    printf("第一个集合为\n");
    for (int i= 0; i<lengtha; i++)
    {
        printf("%f\n",a[i]);
    }
    printf("\n第二个集合为\n");
    for (int j= 0; j<lengthb; j++)
    {
        printf("%f\n",b[j]);
    }
    for (m= 0; m<lengtha; m++)
    {
        c[m] = a[m];
    }
    for (int i=0; i<lengthb; i++)
    {
        int flag=0;
        for (int j=0; j<lengtha; j++)
        {
            if (b[i]==a[j])
                flag=1;
        }
        if (flag==0)
        {
            c[m] = b[i];
            m++;
        }

    }
    printf("并集为\n");
    for (int k= 0; k<(lengtha+lengthb); k++)
    {
        if (c[k]==0)
        {
            break;
        }
        printf("%f\n",c[k]);
    }
}

//求交集,ab是两个集合lengtha是a的长度
void jiao(float a[],int lengtha,float b[],int lengthb)
{
    float c[N]= {0};
    int m=0,j,i;
    printf("第一个集合为\n");
    for (int i= 0; i<lengtha; i++)
    {
        printf("%f\n",a[i]);
    }
    printf("\n第二个集合为\n");
    for (int j= 0; j<lengthb; j++)
    {
        printf("%f\n",b[j]);
    }
    for (int i=0; i<lengthb; i++)
    {
        int flag=1;
        for (int j=0; j<lengtha; j++)
        {
            if (b[i]==a[j])
                flag=0;
        }
        if (flag==0)
        {
            c[m] = b[i];
            m++;
        }

    }
    printf("交集为\n");
    for (int k= 0; k<(m); k++)
    {
        if (c[k]==0)
        {
            break;
        }
        printf("%f\n",c[k]);
    }
}

//求差集,ab是两个集合lengtha是a的长度
void cha(float a[],int lengtha,float b[],int lengthb)
{
    float c[N]= {0};
    int m=0,j,i;
    printf("第一个集合为\n");
    for (int i= 0; i<lengtha; i++)
    {
        printf("%f\n",a[i]);
    }
    printf("\n第二个集合为\n");
    for (int j= 0; j<lengthb; j++)
    {
        printf("%f\n",b[j]);
    }
    for (int i=0; i<lengthb; i++)
    {
        int flag=1;
        for (int j=0; j<lengtha; j++)
        {
            if (b[i]==a[j])
                flag=0;
        }
        if (flag==1)
        {
            c[m] = b[i];
            m++;
        }

    }
    printf("后一个集合对前一个集合的差集为\n");
    for (int k= 0; k<(m); k++)
    {
        if (c[k]==0)
        {
            break;
        }
        printf("%f\n",c[k]);
    }
}

//对称差
void dccha(float a[],int lengtha,float b[],int lengthb)
{
    float c[N]= {0};
    float d[N]= {0};
    int m=0,n = 0,j,i;
    printf("第一个集合为\n");
    for (int i= 0; i<lengtha; i++)
    {
        printf("%f\n",a[i]);
    }
    printf("\n第二个集合为\n");
    for (int j= 0; j<lengthb; j++)
    {
        printf("%f\n",b[j]);
    }
    for (int i=0; i<lengthb; i++)
    {
        int flag=1;
        for (int j=0; j<lengtha; j++)
        {
            if (b[i]==a[j])
                flag=0;
        }
        if (flag==1)
        {
            c[m] = b[i];
            m++;
        }

    }
    for (int i=0; i<lengtha; i++)
    {
        int flag=1;
        for (int j=0; j<lengthb; j++)
        {
            if (b[j]==a[i])
                flag=0;
        }
        if (flag==1)
        {
            d[n] = a[i];
            n++;
        }

    }
    printf("对称差集为\n");
    for (int k= 0; k<(m); k++)
    {
        if (c[k]==0)
        {
            break;
        }
        printf("%f\n",c[k]);
    }
    for (int k= 0; k<(n); k++)
    {
        if (d[k]==0)
        {
            break;
        }
        printf("%f\n",d[k]);
    }
}

int main()
{
    int number1 =0;
    int number2 =0;
    float A[N];
    float B[N];
    printf("请输入第一个集合(不含0)输入0视为结束,以空格分隔\n");
    while(1)
    {
        scanf("%f",&A[number1]);
        if (A[number1]==0)
            break;

        printf("输入的值有%f\n",A[number1]);
        number1++;
    }
    printf("第一个集合输入完毕\n");
    printf("请输入第二个集合(不含0)输入0视为结束\n");
    while(1)
    {
        scanf("%f",&B[number2]);
        if (B[number2]==0)
            break;

        printf("输入的值有%f\n",B[number2]);
        number2++;
    }
    printf("第二个集合输入完毕\n");
    printf("********************************************************************************************************\n");
    int butt = 0;
    printf("请输入您要进行的操作\n1为并集\n2为交集\n3为差集\n4为对称差集\n5为退出\n");
    scanf("%d",&butt);
    switch(butt)
    {
        case 1:
            bing(&A[0],number1,&B[0],number2);
            break;

        case 2:
            jiao(&A[0],number1,&B[0],number2);
            break;
        case 3:
            cha(&A[0],number1,&B[0],number2);
            break;

        case 4:
            dccha(&A[0],number1,&B[0],number2);
            break;

        case 5:
            printf("按任意键退出");
            return 0;
            break;

    }

    return 0;
}


  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kilig*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值