现有如下要求:对于一个集合,要求用计算机编码表示出来,其原则是:对一个元素个数确定的集合将其抽象为一个0、1代码组成的计算机编码,集合中存在的元素i其对应编码的第i个位置为1,若没有则为0,要求编写程序来实现集合间的运算,并且将结果用计算机编码表示出来!
例如:{1,4,6}假设元素个数确定为8;则其计算机编码对应的为10010100
代码部分:
#include<stdio.h>
#include<string.h>
#define Ture 1
#define False 0
//输出一个集合对应的计算机编码
void print(int arr[])
{
int i;
for(i=0;i<8;i++)
{
if(arr[i])
printf("%d",Ture);
else
printf("%d",False);
}
printf("\n\n");
}
//输出集合元素
void printing(int arr[])
{
int i;
printf("{");
for(i=0;i<8;i++)
if(arr[i])
printf("%d ",arr[i]);
printf("}\b\n\n");
//求一个集合的绝对补集
void different(int arr[])
{
int i;
printf("A的绝对补集={");
for(i=0;i<8;i++)
if(!arr[i])
printf("%d ",i+1); //输出补集对应的元素项printf("\b}");
printf("\n\n");
printf("补集对应的计算机编码为:\t");
for(i=0;i<8;i++)
{
if(arr[i])
printf("%d",False);
else
printf("%d",Ture);
}
printf("\n\n");
}
//输入第二个集合的元素
void scan(int arr[])
{
int i;
while(1)
{
scanf("%d",&i);
if(i>=1&&i<=8)
arr[i-1]=i;
if(i==-1) ////以负1为结束标志
break;
}
printf("集合B={");
for(i=0;i<8;i++)
if(arr[i])
printf("%d ",i+1); //输出补集对应的元素项printf("\b}");
printf("\n\n");
printf("该集合对应的计算机编码为:\t");
print(arr);
}
//求已知两个集合的并集
void plus(int arr[],int arr1[])
int i,arry[8]={0};//对数组进行初始化时,先将数组中的元素全部置零for(i=0;i<8;i++)
{
if(arr[i]!=0)
arry[i]=arr[i];
if(arr1[i]!=0)
arry[i]=arr1[i];
}
// printf("输出俩个集合的并集:\n");
printf("为={");
for(i=0;i<8;i++)
{
if(arry[i]) //对应位置不为0,说明集合中有该项元素
printf("%d ",arry[i]);
}
printf("\b}\n\n");
printf("该集合对应的计算机编码为:\t");
print(arry);
}
//求两个集合的交集
void same(int arr[],int arr1[])
{
int j,thesame[8]={0};
for(j=0;j<8;j++)
if(arr[j]!=0&&arr1[j]!=0)
thesame[j]=arr[j];
printf("输出俩个集合的交集:\n");
printf("A和B的交集={");
for(j=0;j<8;j++)
if(thesame[j]) //对应位置不为0,说明集合中有该项元素printf("%d ",thesame[j]);
printf("\b}\n\n");
printf("该集合对应的计算机编码为:\t");
print(thesame);
}
//求两个集合的相对补集
void xdiffer(int arr[],int arr1[])
{
int k,xdiffer[8]={0};
for(k=0;k<8;k++)
if(arr[k]!=0&&arr1[k]==0)
xdiffer[k]=arr[k];
printf("B对A的相对补集为(即A-B):{");
for(k=0;k<8;k++)
if(xdiffer[k]) //对应位置不为0,说明集合中有该项元素
printf("%d ",xdiffer[k]);
printf("\b}\n\n");
printf("对应的计算机编码为:\t");
print(xdiffer);
}
void main()
{
int i,arry[8]={0},arry1[8]={0};//对数组进行初始化时,先将数组中的元素全部置零
int differ[8]={0},differ1[8]={0};//定义两个数组,来存放求得的相对补集
printf("输入集合元素:\n");
while(1)
{
scanf("%d",&i);
if(i>=1&&i<=8)
arry[i-1]=i;
if(i==-1) //以负1为结束标志
break;
}
printf("集合A={");
for(i=0;i<8;i++)
if(arry[i])
printf("%d ",i+1); //输出补集对应的元素项
printf("\b}");
printf("\n\n");
printf("该集合对应的计算机编码为:\t");
print(arry);
printf("输出原集合的绝对补集:\t");
different(arry);
printf("输入第二个集合元素:\n");
scan(arry1);
printf("集合A和B的并集");
plus(arry,arry1);
same(arry,arry1);
xdiffer(arry,arry1);
//xdiffer(arry1,arry);
for(i=0;i<8;i++)
if(arry[i]!=0&&arry1[i]==0)
differ[i]=arry[i];
//printf("B对A的相对补集为(即A-B):");
//printing(differ);
//printf("该集合对应的计算机编码为:\t");
//print(differ);
for(i=0;i<8;i++)
if(arry[i]==0&&arry1[i]!=0)
differ1[i]=arry1[i];
printf("A对B的相对补集为(即B-A):");
printing(differ1);
printf("该集合对应的计算机编码为:\t");
print(differ1);
printf("集A和B的对称差");
plus(differ,differ1);
}
下面是一次运行的结果:。