课程设计报告书基于链表的集合的并交差运算.docx

上传人:b****1 文档编号:15082071 上传时间:2023-06-30 格式:DOCX 页数:19 大小:323.67KB
下载 相关 举报
课程设计报告书基于链表的集合的并交差运算.docx_第1页
第1页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第2页
第2页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第3页
第3页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第4页
第4页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第5页
第5页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第6页
第6页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第7页
第7页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第8页
第8页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第9页
第9页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第10页
第10页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第11页
第11页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第12页
第12页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第13页
第13页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第14页
第14页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第15页
第15页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第16页
第16页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第17页
第17页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第18页
第18页 / 共19页
课程设计报告书基于链表的集合的并交差运算.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

课程设计报告书基于链表的集合的并交差运算.docx

《课程设计报告书基于链表的集合的并交差运算.docx》由会员分享,可在线阅读,更多相关《课程设计报告书基于链表的集合的并交差运算.docx(19页珍藏版)》请在冰点文库上搜索。

课程设计报告书基于链表的集合的并交差运算.docx

课程设计报告书基于链表的集合的并交差运算

《高级语言程序设计》

课程设计报告书

 

题目:

基于链表的集合的并、交、差运算

专业:

学号:

学生姓名:

指导教师:

完成日期:

一、设计内容与设计要求1

1.设计内容1

2.设计要求1

二、课程设计目的1

三、程序模块分析1

1.程序控制流程图1

2.主要函数算法流程图2

1.主函数2

2.集合的并集函数3

四、函数功能说明4

1.所有函数模块声明:

4

3.主要模块的实现:

4

五、程序测试4

六、总结7

附录8

一、设计内容与设计要求

1.设计内容

基于链表的集合的并、交、差运算。

2.设计要求

(1)、利用链表存放集合的元素。

(2)、在链表基础上实现集合的并、交、差。

(3)、要求有合理的输入输出。

(4)、界面要尽可能美观,要方便操作。

二、课程设计目的

在平时学习C语言的过程中,通常只是在课堂上跟随老师的讲解来进行学习,因此在练习上较为缺乏,而课程设计恰恰弥补了这点,它不仅是对平时学习的一种检测,同时在做它的过程中也对自己学习的知识进行了巩固和提高,为以后的学习和工作打下了基础。

三、程序模块分析

1.程序控制流程图

2.主要函数算法流程图

1.主函数

 

否是

 

图2主函数流程图

 

2.集合的并集函数

 

 

 

 

图3求并集函数流程图

求交集、差集的流程图同求并集流程图类似。

四、函数功能说明

1.所有函数模块声明:

voidinput(pointerM);//定义输入集合函数

voidoutput(pointerM);//定义输出集合函数

voidand(pointerA,pointerB,pointerC);//定义集合的并集函数

voidor(pointerA,pointerB,pointerC);//定义集合的交集函数

voiddiffer(pointerA,pointerB,pointerC);//定义集合的差集函数

3.主要模块的实现:

系统以主函数voidmain()为入口,然后调用voidinput()函数,输入元素信息,然后进入主菜单界面。

系统接收用户输入的选择,调用相应的函数,实现各功能。

数据输入界面:

构造函数voidinput(linklistl)实现集合元素的数据输入。

主菜单界面:

构造函数voidmain();实现主菜单的显示。

集合的并集运算:

构造函数vvoidbingji(linklistA,linklistB,linklistC)实现对两个集合的并集运算。

集合的交集运算:

构造函数voidjiaoji(linklistA,linklistB,linklistC)实现对两个集合的交集运算。

集合的差集运算:

构造函数voidchaji(linklistA,linklistB,linklistC);实现集合A-B的运算。

 

五、程序测试

程序运行页面,显示菜单

图5.1

 

选择1,求集合的交集,集合输入完以0结束

图5.2

 

选择2,求集合的并集,集合输入完以0结束

图5.3

 

选择3,求集合的差集集,集合输入完以0结束

图5.4

 

选择0,退出程序

图5.5

 

六、总结

这次的课程设计给了我很大的体会,我能独立的完成这项任务,是对平时的学习和练习的一种肯定,同时也提高了自己的信心

在完成它的过程中当然会遇到很多的困难,首先,由于对集合的三种运算的算法推敲不足,在链表类型及其尾指针的设置时出现错误,导致程序低效。

后来通过调试,错误解决。

再次,就是该算法并不能排除重复输入相同字符的情况,也不能自动滤去非法字符(如空格、阿拉伯数字等)。

这个问题需要设置字符判断语句解决。

还有就是不能循环录入数据并实现各功能,只能录入一次数据进行相关操作,虽然测试时利用do-while语句可以实现循环,但结果却出现错误,我认为应该是未对已输出的链表进行数据删除的原因,这是以后需要改善的地方。

 

附录

源程序清单:

#include"stdafx.h"

#include

#include

#include

#include

typedefstructnode

{

chardata;

structnode*next;

}lnode,*linklist;

/**********初始化函数***************/

lnode*init_lnode()

{

lnode*l;

l=(lnode*)malloc(sizeof(lnode));

l->next=NULL;

returnl;//返回指向新建节点的指针

}

voidinput(linklistl)//定义输入集合函数

{

lnode*s;

chartmp;

scanf("%d",&tmp);

while(tmp!

='\n')

{

s=(lnode*)malloc(sizeof(lnode));

s->data=tmp;

s->next=l->next;

l->next=s;

scanf("%d",&tmp);

}

}

/***********输出函数*****************/

voidoutput(linklistl)

{

lnode*s;

s=l->next;

while(s!

=NULL)

{

printf("%5d",s->data);//输出链表中的数据

s=s->next;

}

printf("\n");

}

/************交集函数*********************/

voidjiaoji(linklistA,linklistB,linklistC)

{

lnode*p,*q,*t;

p=A->next;//将指针p指向链表A

while(p!

=NULL)

{

q=B->next;//将指针q指向链表B

while((q!

=NULL)&&(q->data!

=p->data))

q=q->next;

if((q!

=NULL)&&(q->data==p->data))

{

t=(lnode*)malloc(sizeof(lnode));

t->data=p->data;

t->next=C->next;

C->next=t;

}

p=p->next;

}

}

/*********************差集函数****************/

voidchaji(linklistA,linklistB,linklistC)

{

lnode*p,*q,*s,*t;

p=A->next;

printf("A与B的差集是:

\n");

while(p!

=NULL)

{

q=B->next;

while((q!

=NULL)&&(p->data!

=q->data))

q=q->next;

if(q==NULL)

{

s=(lnode*)malloc(sizeof(lnode));

s->data=p->data;

s->next=C->next;

C->next=s;

}

p=p->next;

}

output(C);

C->next=NULL;

q=B->next;

printf("B与A的差集是:

\n");

while(q!

=NULL)

{

p=A->next;

while((p!

=NULL)&&(p->data!

=q->data))

p=p->next;

if(p==NULL)

{

t=(lnode*)malloc(sizeof(lnode));

t->data=q->data;

t->next=C->next;

C->next=t;

}

q=q->next;

}

output(C);

}

/********并集函数*************************/

voidbingji(linklistA,linklistB,linklistC)

{

lnode*p,*q,*t;

p=A->next;

while(p!

=NULL)

{

t=(lnode*)malloc(sizeof(lnode));

t->data=p->data;

t->next=C->next;

C->next=t;

p=p->next;

}

q=B->next;

while(q!

=NULL)

{

p=A->next;

while((p!

=NULL)&&(p->data!

=q->data))

p=p->next;

if(p==NULL)

{

t=(lnode*)malloc(sizeof(lnode));

t->data=q->data;

t->next=C->next;

C->next=t;

}

q=q->next;

}

}

voidmenu()

{

printf("**************************************\n");

printf("************1.求交集************\n");

printf("************2.求并集************\n");

printf("************3.求差集************\n");

printf("************0.退出************\n");

printf("**************************************\n");

}

voidmain()

{

lnode*a,*b,*c;

a=init_lnode();//将指针指向新建节点;

b=init_lnode();

c=init_lnode();

intm;

printf("本系统功能为求AB集合的交集,并集和差集\n");

menu();

printf("\n请在0-3中选择:

");

scanf("%d",&m);

switch(m)

{

case1:

printf("请输入A集合的元素:

\n");

printf("\n");

input(a);

printf("请输入B集合的元素:

\n");

input(b);

printf("\n输入完成\n");

printf("AB集合的交集是:

");

jiaoji(a,b,c);

output(c);

c->next=NULL;

break;

case2:

printf("请输入A集合的元素:

");

input(a);

printf("\n请输入B集合的元素:

");

input(b);

printf("\n输入完成\n");

printf("AB的合集是:

");

bingji(a,b,c);

output(c);

a->next=NULL;

break;

case3:

printf("请输入A集合的元素:

");

input(a);

printf("\n请输入B集合的元素:

");

input(b);

printf("\n输入完成\n");

chaji(a,b,c);

break;

case0:

break;

}

}/*主函数结束*/

评分标准

(70)

题目难易程度(10)

难(10)

在命题时有说明题目的难易程度

易(0分)

正确性(30)

完成要求功能且经教师测试无错误(30)

完成全部主要功能但对特殊测试样例有错误(11--20)

完成一些功能但有错误(1--10)

不能运行(0)

回答问题情况(20)

能回答出所有问题(20)

能回答部分问题(1-10)

一问三不知(-100)

注释丰富程度(10)

较多(6--10)

主要的功能语句应该给出注释

少许(0--5)

(30)

层次、结构、逻辑性(10)

合理(5--10)

行文是否符合认知逻辑,各级标题的标号是否具有层次性等

不甚合理(0--4)

语言表达能力(10)

行文流畅且仅有不多于5个错别字(5--10)

不太通顺且有多于5个错别字(0--4)

版面(10)

版面整洁,布局合理(5--10)

版面混乱,布局不合理(0--4)

总分

五级制成绩

教师签名:

批改日期:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2