c语言求交、并、补、对称差
#include <stdio.h>
#include <stdlib.h>
#define N 50
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]);
}
}
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]);
}
}
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;
}