课程设计报告集合的交并差运算

  • 格式: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++有了更深入的理解。其次,在程序编译过程中,我遇到了许许多多的问题,这些问题大多数都是小问题,主要是对问题思考的不够全面的结果。但是在自己的反复检查、实验,以及老师的帮助下,这些问题都一一解决了。而在解决问题的过程中,我能够了解到我设计中的不足之处。

程序编辑过程中,我也认识到了自己的不足,对已学过的知识是有所理解,也能够合理地运用,但对细节方面有所忽略,这也正是刚开始时发现程序无法正常运行却不知错在哪的原因。因此这让我懂得了,在学习的过程中要认真仔细。

最后,程序设计让我将以学过的知识综合运用,我感觉编译程序确实很有意思。因为它不仅是一门课程,也是一门语言,我们要学好这门语言,