欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    离散数学实验四09编程实现集合的交并差和补运算.doc

    • 资源ID:123663       资源大小:153.50KB        全文页数:18页
    • 资源格式: DOC        下载积分:5
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要5
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    离散数学实验四09编程实现集合的交并差和补运算.doc

    1、离散数学实验报告专业班级: 姓名: 学号: 实验成绩:1【实验题目】集合运算2【实验目的】编程实现集合的交、并、差和补运算。3【实验内容】从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、条件和双条件的真值。4. 【实验要求】通过以下界面提示实现相应的集合运算*请分别输入集合A与集合B的元素:请选择(15)要进行的集合运算:1. 集合的交运算(AB)2. 集合的并运算(AB)3. 集合的差运算(A-B)4. 集合的补运算(A=E-A)5. 继续/退出(y/n)*5. 【算法描述】(1)用数组A,B,C,E表示集合。假定A=1,3,4,5,6,7,9,10,B=2,,3,4,7,8,10,

    2、 E=1,2,3,4,5,6,7,8,9,10,输入数组A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合A,B是集合E的子集。以下每一个运算都要求先将集合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中的元素逐一与数组B中的元素进行比较,把不相同的元素添加到

    3、数组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(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=E-A=x

    4、xE且xA将数组E中的元素逐一与数组A中的元素进行比较,把不相同的元素保存到数组C中,数组C便是集合A关于集合E的补集。求补集是一种特殊的集合差运算。C语言算法:k=0;for (i=0;iM;i+)for (j=0;jN;j+)if (Ei= =Aj)break; if (j= =N)Ck=Ei; k+;6. 【源程序(带注释)】#include #include #include using namespace std;void out() /打印星号的子函数 cout*n;int main() for(;) int a100,b100,c100,e100,jj100,bj100,cha

    5、100,bu100;/定义数组ABCE,以及jj,bj,cha,bu保存四种运算的数组 int sizea,sizeb,sizec,sizee,sizejj,sizebj,sizecha,sizebu,i=0,j=0,t,x,p=0,k=0,ri=0,time=0,p1=0,p2=0;/定义数组长度,以及控制变量 char w30; /用于判断字符串是否相等时使用 char y30;/用于判断字符串是否相等时使用 char str100;/用于临时接收输入进的数组 char *v;/指针,用于拆散字符串使用 out(); coutt请选择(1-5)要进行的集合运算:endl t1.集合的交运算

    6、AB)endl t2.集合的并运算(AB)endl t3.集合的差运算(A-B)endl t4.集合的补运算(A=E-A)endl t5.继续/退出(y/n)endl; out(); for(;) for(;) cout请输入(1-5)要进行的集合运算:; gets(w); if(strcmp(w,1)=0) x=1;break;/strcmp 用于判断字符串是否相等,相等时则把x赋对应的值,否则提示出错 else if(strcmp(w,2)=0) x=2;break; else if(strcmp(w,3)=0) x=3;break; else if(strcmp(w,4)=0) x=4

    7、break; else if(strcmp(w,5)=0) x=5;break; else cout提示:输入有误!n;fflush(stdin); switch(x)/使用switch函数提示不同功能 case 1:out();cout您要进行集合的交运算endl;out();break; case 2:out();cout您要进行集合的并运算endl;out();break; case 3:out();cout您要进行集合的差运算endl;out();break; case 4:out();cout您要进行集合的补运算endl;out();break; case 5: cout继续/退出

    8、y/n):; gets(y); if(strcmp(y,y)=0) continue; else if(strcmp(y,n)=0) exit(1); default:cout0 & x5) break; cout请输入集合A中的元素:n按回车结束输入(元素用逗号隔开)A=;for(;) gets(str); if(str0=0) sizea=0;p1=1;break;/若接收进来的字符串第一个字符ASC II码为0(null),跳出循环 for(;) t=1; for(i=0;istrlen(str);i+) if(stri!=,) if(stri9)/判断除逗号和数字以外是否还有其他字符

    9、 printf(输入的只能为数字!请重新输入(元素用逗号隔开)A=); gets(str); t=0; break; if (t=1) break; v=strtok(str, ,);/以逗号拆分字符串 a0=atoi(v);/将拆分的第一份字符串利用atoi函数,把整型数字赋值给a0 i=1; while (v=strtok(NULL, ,)/继续拆分字符串,直到字符串结尾 ai=atoi(v);i+;/把拆分的字符串变为整型数组,赋值给ai sizea=i; for(j=0;jsizea-1;j+)/给A数组进行排序 for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t

    10、 t=1; for (i=0;isizea-1;i+) if(ai=ai+1) cout提示:数字重复!请重新输入A数组的元素endlA=; t=0; break; if(t=1) break; out(); coutA数组为: ; for(i=0;isizea;i+) coutai ; coutendl; out();cout请输入集合B中的元素:n按回车结束输入(元素用逗号隔开)B=;for(;) gets(str); if(str0=0) sizeb=0;p2=1;break;/若接收进来的字符串第一个字符ASC II码为0(null),跳出循环 for(;) t=1; for(i=0

    11、istrlen(str);i+) if(stri!=,) if(stri9) printf(输入的只能为数字!请重新输入(元素用逗号隔开)B=); gets(str); t=0; break; if (t=1) break; v=strtok(str, ,); b0=atoi(v); i=1; while (v=strtok(NULL, ,) bi=atoi(v);i+; sizeb=i; for(j=0;jsizeb-1;j+) for(i=0;ibi+1) t=bi; bi=bi+1; bi+1=t; t=1; for (i=0;isizeb-1;i+) if(bi=bi+1) cout

    12、提示:数字重复!请重新输入B数组的元素endlB=; t=0; break; if(t=1) break; out(); coutB数组为: ; for(i=0;isizeb;i+) coutbi ; coutendl; out();/给A,B做并集C for(i=0;isizea;i+) ci=ai; for(j=0;jsizeb;j+) for(i=0;isizea;i+)if(ci=bj)p=1; if(p!=1)csizea+k=bj;k+; p=0;sizec=sizea+k; for(j=0;jsizec-1;j+) for(i=0;ici+1) t=ci; ci=ci+1; ci

    13、1=t; /并集C里的内容放进bj数组 for(i=0;isizec;i+) bji=ci; sizebj=sizec;/给A、B做交集,结果放进jjk=0;for(i=0;isizea;i+)for(j=0;jsizeb;j+)if(ai=bj)jjk=ai;k+;sizejj=k;/给A、B做差集 k=0;for(i=0;isizea;i+) for(j=0;jsizeb;j+) if(ai=bj)break;if(j=sizeb)chak=ai;k+; sizecha=k;cout请输入全集E中的元素:n按回车结束输入(元素用逗号隔开)E=; for(;) gets(str); if

    14、p1=1 & p2=1)/若接收进来的字符串第一个字符ASC II码为0(null),判断A数组和B数组是否都为空 sizee=0; break; for(;) t=1; for(i=0;istrlen(str);i+) if(stri!=,) if(stri9) printf(输入的只能为数字!请重新输入(元素用逗号隔开)E=); gets(str); t=0; break; if (t=1) break; v=strtok(str, ,); e0=atoi(v); i=1; while (v=strtok(NULL, ,) ei=atoi(v);i+; sizee=i; for(j=0;

    15、jsizee-1;j+) for(i=0;iei+1) t=ei; ei=ei+1; ei+1=t; t=1; for (i=0;isizee-1;i+) if(ei=ei+1) cout提示:数字重复!请重新输入E数组的元素endlE=; t=0; break; if(t=1) for(i=0;isizebj;i+) t=0; for(j=0;jsizee;j+) if(bji=ej) t=1; if(t=0) cout提示:全集E没有真包含集合A和集合B!n请重新输入E数组的元素endlE=; break; if(t=1) break; out(); cout全集E数组为: ; for(i

    16、0;isizee;i+) coutei ; coutendl; /给A做补集 k=0; for (i=0;isizee;i+) for (j=0;jsizea;j+) if (ei=aj) break; if (j=sizea) buk=ei; k+; sizebu=k; if(x=1) /根据用户刚开始输入的想进行的运算,输出对应结果 out(); coutA、B集合的交运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; cout

    17、AB= ; for(i=0;isizejj;i+) coutjji ; coutendl; time+; else if(x=2) out(); coutA、B集合的并运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; coutAB= ; for(i=0;isizebj;i+) coutbji ; coutendl; time+; else if(x=3) out(); coutA、B集合的差运算结果如下:endl; coutA= ;

    18、 for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; coutA-B= ; for(i=0;isizecha;i+) coutchai ; coutendl; time+; else if(x=4) out(); coutA、E集合的补运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; cout全集E= ; for(i

    19、0;isizee;i+) coutei ; coutendl; coutA=E-A ; for(i=0;isizebu;i+) coutbui ; cout0) if(time=0) break; out(); system(pause); coutt您还可以继续进行以下运算:endl /当计算已经进行了一次之后,可继续进行运算 t1.交运算(AB)endl t2.并运算(AB)endl t3.差运算(A-B)endl t4.补运算(A=E-A)endl t5.继续/退出(y/n)endlendl; for(;) cout请输入(1-5)要进行的集合运算n重新运算请选择5选项的“继续”:;

    20、fflush(stdin); gets(w); if(strcmp(w,1)=0) x=1;break; else if(strcmp(w,2)=0) x=2;break; else if(strcmp(w,3)=0) x=3;break; else if(strcmp(w,4)=0) x=4;break; else if(strcmp(w,5)=0) x=5;break; else cout提示:输入有误!n; switch(x) case 1: out(); coutA、B集合的交运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coute

    21、ndl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; coutAB= ; for(i=0;isizejj;i+) coutjji ; coutendl; time+; break; case 2: out(); coutA、B集合的并运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; coutAB= ; for(i=0;isizebj;i+) coutbji ; coutendl; t

    22、ime+; break; case 3: out(); coutA、B集合的差运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; coutA-B= ; for(i=0;isizecha;i+) coutchai ; coutendl; time+; break; case 4: out(); coutA、E集合的补运算结果如下:endl; coutA= ; for(i=0;isizea;i+) coutai ; coutendl; coutB= ; for(i=0;isizeb;i+) coutbi ; coutendl; cout全集E= ; for(i=0;isizee;i+) coutei ; coutendl; coutA=E-A ; for(i=0;isizebu;i+) coutbui ; coutendl; time+; break; case 5: cout继续/退出(y/n


    注意事项

    本文(离散数学实验四09编程实现集合的交并差和补运算.doc)为本站会员(夺命阿水)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!




    宁ICP备18001539号-1

    三一文库
    收起
    展开