离散数学实验二集合运算设计

实验2 集合运算设计

一、实验目的

熟悉并、交、差、对称差等运算,并编程设计。

二、实验内容

在C语言中,有数组、结构体、共用体、枚举类型等用户自定义的复合型数据类型,但是并没有提供集合类型数据的定义以及集合的一些基本运算的实现。为简单起见,这里,我们并不要求编写出专门的集合类型的数据类型及其基本运算,只要求用数组来存放集合中的元素,并设计其并、交、差、对称差等运算。

1. 对任意集合A,B,求它们的并集C=A∪B。可以先将集合A中的元素全部送入集合C,然后将集合B中的元素送入集合C中,此时要注意与集合A相同的元素要跳过。

2. 对任意集合A,B,求它们的交集C=A∩B。将集合A中与集合B中的相同的元素送入集合C中。

3. 对任意集合A,B,求它们的差集C=A-B。将集合A的各个元素与集合B的元素进行比较,如果集合B的所有元素与之均不相等,则将该元素送入集合C中。

4. 对任意集合A,B,求它们的对称差C=A⊙B。先将集合A的各个元素与集合B的元素进行比较,如果集合B的所有元素与之均不相等,则将该元素送入集合C中;然后将集合B的各个元素与集合A的元素进行比较,如果集合A的所有元素与之均不相等,则将该元素送入集合C中。 源代码: #include int main() {

int A[10],B[10],i,j=0,k; //假设集合A、B中分别有10个元素

printf(\请输入集合A的元素:\\n\for(i=0;i<10;i++) scanf(\

printf(\请输入集合B的元素:\\n\for(i=0;i<10;i++) scanf(\

printf(\集合A和集合B的并集为:\for(i=0;i<10;i++)

printf(\ //先打印集合A中的元素(集合A中所有元素都存在该并集中) while(j<10) { k=0;

for(i=0;i<10;i++) { }

if(k==10) //只有k累加到10,才能证明B[j]存在于A集合中 printf(\

j++; //检查下一个元素 }

printf(\

printf(\集合A和集合B的交集C为:\

if(B[j]!=A[i]) //B集合中每个元素都与集合A中所有元素进行比较 k=k+1;

//开始查找B集合中A集合不存在的元素

for(i=0;i<10;i++) {

for(j=0;j<10;j++) if(B[j]==A[i]) {

printf(\

break; //中断,无须查找了,缩短程序时间复杂度

}

printf(\集合A和集合B的对称差C为:\j=0; while(j<10) {

k=0;

for(i=0;i<10;i++) { } if(k==10)

printf(\ / /打印集合B中不存在集合A中的元素

if(B[j]!=A[i]) k=k+1;

printf(\集合A和集合B的差集C为:\ j=0; while(j<10) { }

printf(\

k=0;

for(i=0;i<10;i++) { } if(k==10)

printf(\ / /打印集合B中不存在集合A中的元素 j++;

if(B[j]!=A[i]) k=k+1;

}

printf(\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4