文档介绍:离散数学实验报告专业班级: 12 级计算机本部一班姓名:鲍佳珍学号: 2012********** 实验成绩: 1.【实验题目】命题逻辑实验四 2.【实验目的】掌握用计算机求集合的交、并、差和补运算的方法。 3.【实验内容】编程实现集合的交、并、差和补运算。 4、【实验要求】 C或C++语言编程实现 5. 【算法描述】(1)用数组 A,B,C,E表示集合。假定 A={1,3 ,4,5,6,7,9,10}, B={2 ,,3,4,7,8,10}, E={1,2 ,3,4,5,6,7,8,9,10}, 输入数组 A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合 A,B是集合 E的子集。以下每一个运算都要求先将集合 C置成空集。(2)二个集合的交运算: A ?B={x|x ?A且x ?B} 把数组 A中元素逐一与数组 B中的元素进行比较,将相同的元素放在数组 C 中,数组 C便是集合 A和集合 B的交。 C语言算法: for(i=0;i<m;i++) for(j=0;j<n;j++) if(a[i]= =b[j]) c[k++]=a[i]; (3)二个集合的并运算: A ?B={x|x ?A或x ?B} 把数组 A中各个元素先保存在数组 C中。将数组 B中的元素逐一与数组 A中的元素进行比较,把不相同的元素添加到数组 C中,数组 C便是集合 A和集合 B 的并。 C语言算法: for(i=0;i<m;i++) c[i]=a[i]; for(i=0;i<n;i++) { for(j=0;j<m;j++) if(b[i]= =c[j]) break; if(j= =m){ c[m+k]=b[i];k++;} }(4)二个集合的差运算: A-B={x|x ?A且x ?B} 将数组 A中的元素逐一与数组 B中的元素进行比较,把数组 A与数组 B不同的元素保存在数组 C中,数组 C便是集合 A和集合 B的差 A-B 。 C语言算法: for (j=0;j<m;j++) {for (i=0;i<n;i++) {if(A[j]= =B[i]) {C[k]=A[j]; k++; break; }if(j= =n){C[k]=A[i]; k++; }} (5)集合的补运算: ~A=B-A={x|x ?B且x ?A} 将数组 E中的元素逐一与数组 A中的元素进行比较,把不相同的元素保存到数组 C中,数组 C便是集合 A关于集合 E的补集。求补集是一种特殊的集合差运算。 C语言算法: k=0; for (i=0;i<M;i++) {for (j=0;j<N;j++) {if(B[i]= =A[j]) break; }if(j==N) {C[k]= B[i]; k++; } 6. 【源程序(带注释)】#include<> int main(){ int a[80],b[80],c[80],e[80]; int m,n,k,l,i,j,p,q,o; l=1; while(l){ printf(" ### 欢迎使用集合运算软件###\n"); printf("# 请输入您要输入的 A 数组内存放的数字的数目: "); scanf("%d",&m); // 输入一个数组内需要存放的数字的数目 printf("# 请输入集合 A 中的元素: "); scanf("%d",&a[0]); for(i=1;i<m;i++){ scanf("%d",&a[i]); for(j=0;j<i;j++) if(a[i]==a[j]){ printf("# 您的输入有误! 集合中的元素不能相同! \n"); printf("# 请重新输入: "); for(i=0;i<m;i++) scanf("%d",&a[i]); } // 判断数组内是否存在重复的数字,若有,能重新输入} printf("# 请输入您要输入的 B 数组内存放的数字的数目: "); scanf("%d",&n); printf("# 请输入集合 B 中的元素: "); scanf("%d",&b[0]); for(i=1;i<n;i++){ scanf("%d",&b[i]); for(j=0;j<i;j++) if(b[i]==b[j]){ printf("# 您的输入有误! 集合中的元素不能相同! \n"); printf("# 请 重新输入: "); // 重新输入集合 B for(i=0;i<n;i++) scanf("%d",&b[i]); }} printf("# 请输入您要输入的 E 数组内存放的数字的数目: "); // 输入 B 集合的元素数 scanf("%d",&o); printf("# 请输入集合 E 中的元素: "); sca