《离散数学集合运算C++或C语言实验报告》由会员分享,可在线阅读,更多相关《离散数学集合运算C++或C语言实验报告(11页珍藏版)》请在金锄头文库上搜索。
1、离散数学实验报告专业班级:12级计算机本部一班 姓名:鲍佳珍 学号: 201212201401016 实验成绩: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的子集。以下每一个运算都要求先将
2、集合C置成空集。(2)二个集合的交运算:AB=x|xA且xB把数组A中元素逐一与数组B中的元素进行比较,将相同的元素放在数组C中,数组C便是集合A和集合B的交。C语言算法:for(i=0;im;i+)for(j=0;jn;j+)if(ai= =bj) ck+=ai;(3)二个集合的并运算:AB=x|xA或xB把数组A中各个元素先保存在数组C中。将数组B中的元素逐一与数组A中的元素进行比较,把不相同的元素添加到数组C中,数组C便是集合A和集合B的并。C语言算法:for(i=0;im;i+)ci=ai;for(i=0;in;i+)for(j=0;jm;j+)if(bi= =cj) break;if
3、(j= =m) cm+k=bi;k+;(4)二个集合的差运算:A-B=x|xA且xB将数组A中的元素逐一与数组B中的元素进行比较,把数组A与数组B不同的元素保存在数组C中,数组C便是集合A和集合B的差A-B。C语言算法:for (j=0;jm;j+)for (i=0;in;i+)if (Aj= =Bi)Ck=Aj;k+;break;if (j= =n) Ck=Ai; k+;(5)集合的补运算: A=B-A=x|xB且xA将数组E中的元素逐一与数组A中的元素进行比较,把不相同的元素保存到数组C中,数组C便是集合A关于集合E的补集。求补集是一种特殊的集合差运算。C语言算法:k=0;for (i=0
4、;iM;i+)for (j=0;jN;j+)if (Bi= =Aj)break; if (j=N)Ck=Bi; k+;6. 【源程序(带注释)】#includeint main()int a80,b80,c80,e80;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,&a0);for(i=1;im;i+)scanf(%d,&ai);for(j=0
5、;ji;j+)if(ai=aj)printf(#您的输入有误!集合中的元素不能相同!n);printf(#请重新输入:); for(i=0;im;i+)scanf(%d,&ai); /判断数组内是否存在重复的数字,若有,能重新输入printf(#请输入您要输入的B数组内存放的数字的数目:);scanf(%d,&n);printf(#请输入集合B中的元素:);scanf(%d,&b0);for(i=1;in;i+)scanf(%d,&bi);for(j=0;ji;j+)if(bi=bj)printf(#您的输入有误!集合中的元素不能相同!n);printf(#请重新输入:); /重新输入集合Bf
6、or(i=0;in;i+)scanf(%d,&bi);printf(#请输入您要输入的E数组内存放的数字的数目:); /输入B集合的元素数scanf(%d,&o);printf(#请输入集合E中的元素:);scanf(%d,&e0);for(i=1;io;i+)scanf(%d,&ei);for(j=0;ji;j+)if(ei=ej)printf(#您的输入有误!集合中的元素不能相同!n);printf(#请重新输入:); /重新输入集合Efor(i=0;io;i+)scanf(%d,&ei);k=0;for(i=0;im;i+)for(j=0;jn;j+)if(ai=bj)ck+=ai;p=
7、k;printf(#A数组与B数组的交集为);for(k=0;kp;k+)printf(%d ,ck);printf(n); /交集的代码k=0;for(q=0;qp;q+)cq=0; /将C数组置空for(i=0;im;i+)ck=ai;k+; for(i=0;in;i+)for(j=0;jk;j+)if(bi=cj) break;if(j=k-1)ck=bi;k+; /并集的代码p=k; /确定C数组当前的数目,便于下一次置空printf(#A数组与B数组的并集为);for(k=0;kp;k+)printf(%d ,ck);printf(n);k=0;for(q=0;qp;q+)cq=0;
8、for(j=0;jm;j+)for (i=0;in;i+)if (aj=bi)break;if(j=n-1) ck=ai;k+; /差运算的代码p=k;printf(#A数组与B数组的差运算集为);for(k=0;kp;k+)printf(%d ,ck);printf(n);k=0;for(q=0;qp;q+)cq=0;for (i=0;io;i+)for (j=0;jm;j+)if (ei=aj)break; if (j=m-1)ck=ei;k+; /补运算的代码p=k;printf(#A数组与B数组的补运算集为);for(k=0;kp;k+)printf(%d ,ck);printf(nn);printf(#您是否还想继续计算。是请输入1,否请输入0n);scanf(%d,&l); /while语句判断是否继续printf(nn欢迎使用,再见!n);return 0;7 【实验结果与分析总结(含运行结果截图)】输入界面输入各数组并输出结果是否继续查找继续查找,数组重复并重新输入结束使用