课程设计报告集合的交并差运算
- 格式:doc
- 大小:207.00 KB
- 文档页数:12
兰州商学院陇桥学院
工学系课程设计报告
设 计 题 目:集合的交、并、差运算
系 别:工学系
专 业 (方 向):信息管理与信息系统
年 级、 班:20XX级(X)班
学 生 姓 名:张某某
学 生 学 号:000000000000
指 导 教 师:王某某
20xx年 00月 00日
目录
一、系统开发的背景 ..................................................... 1
二、系统分析与设计 ..................................................... 1
(一)系统功能要求………………………………………………………………………1
1、 输入集合1中的元素; .......................................... 1
2、 输入集合2中的元素; .......................................... 1
3、 执行交集、并集、差集运算; .................................... 1
(二)系统模块结构设计…………………………………………………………………1
1、 集合的交集运算, .............................................. 1
2、 集合的并集运算, .............................................. 2
3、 集合的差集运算, .............................................. 2
三、系统的设计与实现 ................................................... 2
(一)集合的交集运算:VOID JIAO()………………………………………………………2
(二)集合的并集运算:VOID BING()………………………………………………………3
(三)集合的差集运算:VOID CHA() ....................................... 4
四、系统测试 ........................................................... 5
(一)测试MAIN()函数……………………………………………………………………5
(二)测试VOID JIAO()函数………………………………………………………………5
(三)测试VOID BING()函数………………………………………………………………5
(四)测试VOID CHA()函数 .............................................. 5
五、总结 ............................................................... 6
六、附件(代码、部分图表) ............................................. 7
集合的交、并、差运算
一、系统开发的背景
为了演示执行集合的交、并和差运算的程序,因此设计了这个程序。
二、系统分析与设计
(一) 系统功能要求
可以对键盘输入的集合元素进行反序输出,然后对输入的集合进行交集,并集,差集的运算。
1、 输入集合1中的元素;
2、 输入集合2中的元素;
3、 执行交集、并集、差集运算;
(二) 系统模块结构设计
通过对系统功能的分析,集合交并差系统功能如图1所示。
图1 集合的交并差运算系统功能图
通过上图的功能分析,把整个系统划分为3个模块:
1、 集合的交集运算,该模块主要实现:找出集合1与集合2中相同的元素并输出,借助函数void jiao()来实现;
2、 集合的并集运算,该模块主要实现:将集合1与集合2中的元素集中于一起,并且全部输出,借助函数void bing()来实现;
3、 集合的差集运算,该模块主要实现:集合1减去集合2输出所得结果;集合2减去集合1输出所得结果, 借助函数void cha()来实现。
三、系统的设计与实现
(一) 集合的交集运算:void jiao()
分析:首先输出集合1与集合2的元素,然后输出集合1与集合2中相同的元素。流程图如图2所示。
图2:jiao(pointer *head1,pointer *head2, pointer *head3)流程图
该模块的具体代码如下所示。
void jiao(pointer *head1,pointer *head2, pointer *head3){
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->data!=p1->data))
{
p2=p2->link;
}
if((p2!=NULL)&&(p2->data=p1->data))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->data=p1->data;
p3->link=head3->link;
head3->link=p3;
} p1=p1->link;
}
}
(二) 集合的并集运算:void bing()
分析:首先输出集合1与集合2的元素,然后输出集合1与集合2中的全部元素。流程图如图3所示。
图3:bing(pointer *head1,pointer *head2, pointer *head3)流程图
该模块的具体代码如下所示。
void bing(pointer *head1,pointer *head2, pointer *head3)
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->data=p1->data;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->data!=p2->data))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->data=p2->data;
p3->link=head3->link;
head3->link=p3; }
p2=p2->link;
}
}
(三)集合的差集运算:void cha()
分析:首先输出集合1减去集合2的结果,然后输出集合2减去集合1中的结果。流程图如图4所示。
图4:cha(pointer *head1,pointer *head2, pointer *head3)流程图
该模块的具体代码如下所示。
void cha_1(pointer *head1,pointer *head2, pointer *head3){
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->data!=p1->data))
{
p2=p2->link;
}
if(p2==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->data=p1->data;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
四、系统测试
(一) 测试main()函数
测试该函数使用的测试方法,测试的具体步骤,测试用例的选取,测试的结果。
图5 系统界面
(二) 测试void jiao()函数
测试该函数执行集合交集运算的执行结果。
图6 交集执行结果
(三) 测试void bing()函数
测试该函数执行集合并集运算的执行结果。
图7 并集执行结果
(四)测试void cha()函数
测试该函数执行集合并集运算的执行结果。
图8 差集执行结果
五、总结
系统完成了执行计算集合的交集、并集以及差集的功能。
系统虽然完整运行,但也有不足。系统的设计未能考虑到集合元素的唯一性,从键盘输入的集合元素在原样输出时,未能将重复元素剔除;再者,系统未能实现选择性操作,即输入集合1 与集合2中的元素以后,按Enter便输出交集、并集与差集的全部结果。
我的收获:通过课程设计,我学习到了许多内容。首先是对已学过的内容的尤其是上学期C++有了更深入的理解。其次,在程序编译过程中,我遇到了许许多多的问题,这些问题大多数都是小问题,主要是对问题思考的不够全面的结果。但是在自己的反复检查、实验,以及老师的帮助下,这些问题都一一解决了。而在解决问题的过程中,我能够了解到我设计中的不足之处。
程序编辑过程中,我也认识到了自己的不足,对已学过的知识是有所理解,也能够合理地运用,但对细节方面有所忽略,这也正是刚开始时发现程序无法正常运行却不知错在哪的原因。因此这让我懂得了,在学习的过程中要认真仔细。
最后,程序设计让我将以学过的知识综合运用,我感觉编译程序确实很有意思。因为它不仅是一门课程,也是一门语言,我们要学好这门语言,