#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");
}
}
}
版权声明:本文为qq_37796444原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。