离散数学(实验一),集合的交,并,差运算

#include  <stdio.h>
#include <windows.h>
int input(int d[],int n)   //numa=input(A,0);   numb=input(B,0);
{
    int i;
    //n=0;
    do
    {
        scanf("%d",d+n);
        n+=1;
    }while(d[n-1]>=0);   //限制集合中的数为正整数
    d[n-1]='\0';
    return n-1;
}
void sort(int d[],int *n)  //   sort(C,&n);  并集
{
    int i,j,t,k;
    for(i=0;i<*n-1;i++)
    {
        for(j=*n-1;j>i;j--)
        {   if(d[j]==d[j-1]) //并集时两个数相等时,将重复的数覆盖
            {
                *n-=1;
                for(k=j;k<*n;k++)
                    d[k]=d[k+1];
            }
            if(d[j]<d[j-1])
            {
                t=d[j];
                d[j]=d[j-1];
                d[j-1]=t;
            }

        }
    }
}
int fn(int d1[],int num1,int d2[],int num2)
{                                  // fn(A,numa,B,numb);
    int i,j,m;

    for(i=0;i<num1;i++)
    {
        m=0;   //假设m等于0的时候就成立
        for(j=0;j<num2;j++)
        {
            if(d1[i]==d2[j])
            {
                m=1;
                break;
            }
        }
        if(m==0)
            printf("%d,",d1[i]);
    }
}

int main()
{
    SetConsoleTitle("集合的并交差运算");
    system("mode con cols=60 lines=20");
    printf("\n************离散数学,实验报告《一》************\n\n");
    printf("姓名: 123  ******************** 学号: 20201312087\n\n");
    printf("温馨提示:以下在输入集合时,当遇到负数时就自动跳出循环,\n进入下一步输入.\n\n");
    int A[100],B[100],C[200];
    int numa,numb,n;
    int i,j;
    int chioce;
    //输入
    printf("请输入集合A:  ");
    numa=input(A,0);
    sort(A,&numa);
    printf("请输入集合B:  ");
    numb=input(B,0);
    sort(B,&numb);
    printf("*********************\n");
     printf("输入‘1’表示交集\n");
     printf("输入‘2’表示并集\n");
     printf("输入‘3’表示差集\n");
    printf("*********************\n");
     printf("请选择:");
     while(1){
    scanf("%d",&chioce);
    switch (chioce){
    case 1:
         //交集
    printf("\n\n集合交集A ∩ B={");
    for(i=0;i<numa;i++)      //外层循环行
    {
        for(j=0;j<numb;j++)  //内层控制列
        {
            if(A[i]==B[j])
            {
                printf("%d,",A[i]);
            }

        }
    }
    printf("\b}\n\n");
        break;
    case 2:
    //并集
    n=numa+numb;
    printf("集合并集A∪B={");
    for(i=0;i<numa;i++)
    {
        C[i]=A[i];
    }
    for(i=numa;i<n;i++)
    {
        C[i]=B[i-numa];
    }
    sort(C,&n);
    for(i=0;i<n;i++)
        printf("%d,",C[i]);
    printf("\b}\n\n");
        break;
    case 3:
         //集合差
    printf("集合的差集A-B={");
   fn(A,numa,B,numb);
   printf("\b}\n\n");
        break;
    default:
        printf("只能输入1~3之间的整数\n");
    }
}

}

 

猜你喜欢

转载自blog.csdn.net/qq_37796444/article/details/80181469
今日推荐