课程设计报告参考.docx
- 文档编号:12697356
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:13
- 大小:48.82KB
课程设计报告参考.docx
《课程设计报告参考.docx》由会员分享,可在线阅读,更多相关《课程设计报告参考.docx(13页珍藏版)》请在冰点文库上搜索。
课程设计报告参考
红河学院工学院
课
程
设
计
报
告
专业:
计算机科学与技术
年级:
2014级
学号:
201401030119
姓名:
苏志强
成绩:
红河学院工学院编制
说明
1、本报告供学生课程设计时使用。
2、学生应认真阅读所学课程配套的相关资料。
3、课程设计报告里面的内容要手工填写,以备存档使用(源程序可打印)。
4、课程设计的总评成绩根据课程的性质,按一定比例计入该门课程成绩。
5、报告中的“设计方法、设计技术路线、设计成果及总结分析”中的内容是评分的主要依据,如果不够书写,可以自行添加附页。
6、按规定的时间提交报告给教师评定成绩,由任课教师交到工学院存档。
课程设计目录
课程名称:
数据结构与算法
任务序号
任务名称
起止页码
60
家族关系查询系统
3---11
设计任务
任务
名称
家族关系查询系统
班级
2014级1班
指导
教师
许海成
地点
红河学院
成绩
学年
2015-2016
开始
日期
2015-12-17
结束
日期
2015-12-310
组员
设计目的及要求:
目的:
(1)培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。
(2)培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。
(3)培养学生初步的软件设计及软件测试的能力。
要求:
(1)首先要分析题目,查阅相关资料。
(2)清晰的设计出整个程序的算法思路。
(3)按要求编写程序。
(4)写出运行结果,并分析结果。
设计内容及基本要求:
内容:
运用队列的存储结构,构建家族关系树。
输入家族的名称,以此名称作文件的名称,建立文本文件。
按层次输入结点信息,在文件中每个人的信息占一行,同时保存到树的存储结构中。
基本要求:
(1)要给出整个设计的框架说明,并描述所设计程序的各个函数功能。
(2)要求能全面的测试所设计程序的功能;同时给出程序的测试情况,并分析运行结果。
(3)要求程序又充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。
(4)多查阅与之相关的资料,确保程序中的语句定义,格式准确无误。
(5)书写规范。
采用的设计方法、设计技术路线:
(包括本任务的总体安排和进度、采用的设计方法和步骤以及任务流程图、可能遇到的问题和解决的方法)
设计方法及步骤:
(1)首先定义头文件以及相应的宏,然后再定义三个结构体(其中最重要的结构体是一个含3个成员的结构体,且结构体变量为Mgraph);
(2)创建图。
包括顶点数,边数的输入,以及各顶点(为字符)的输入。
(3)定义图中各顶点之间的关系为0(即无关联)。
(4)利用for循环将每一条边的起点与终点输入,并将输入的边的起点、终点与输入的有向图顶点不复合的边,赋值为1。
(5)定义主函数。
主函数中包括,调用创建图的函数,并输出该图的深度优先遍历和广度优先遍历的结果。
任务总体安排:
2015-12-17~2015-12-20完成课程设计所要求的全部任务。
进度安排:
2015-12-20~2015-12-22:
上网查找与题目相关的资料,并重点阅读课本上的相关知识。
2015-12-23~2015-12-24:
对问题进行抽象,得到描述问题的算法,编写出程序。
2015-12-25~2015-12-26:
设计完整的程序进行演示。
2015-1-27~2015-1-28:
对设计进行总结分析。
2015-12-29~2015-12-30:
填写课程设计手册,并提交指导教师。
任务流程图:
定义头文件----------定义结构体----------创建图----------主函数----------运行----------输出家族信息。
可能遇到的问题:
(1)由于参考资料有限,以及自身对程序设计的学习不足,使得在程序中对某些方面的操作可能不符合要求。
(2)程序中的算法结构单一,考虑不全,可能不能处理一些特殊、复杂的图。
解决的方法:
(1)多看一些相关知识的参考例子,并对其仔细揣摩,深入了解其含义,掌握其运用的方法;还可以多上网查看和研究一些相似的例子,勤于思考,揣摩创新,善于借鉴他人的成果。
(2)根据自身的能力,编写出既严密,又清楚易懂的程序。
设计成果及总结分析:
(设计成果包括程序清单、测试数据、指定的功能模块说明、设计说明,程序清单可打印,总结分析要手写)
功能模块:
创建图的函数模块主程序模块
主要由以下函数构成(函数的功能在程序清单中说明):
(1)LocateVex();
(2)CreatUDN();(3)FirstAdjVex();(4)VisitFunc();
(5)NextAdjVex();(6)DFS();(7)DFSTraverse();(8)InitQueue();
(9)EnQueue();(10)DeQueue();(11)QueueEmpty();(12)BFSTraverse();
(13)main()。
程序清单:
#defineINFINITY10000/*无穷大*/
#defineMAX_VERTEX_NUM40
#defineMAX40
#include
#include
#include
#include
typedefstructArCell{
intadj;
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedefstruct
{
charname[20];
}infotype;
typedefstruct
{
infotypevexs[MAX_VERTEX_NUM];
AdjMatrixarcs;
intvexnum,arcnum;
}MGraph;
intLocateVex(MGraph*G,char*v)
{intc=-1,i;
for(i=0;i
if(strcmp(v,G->vexs[i].name)==0)
{c=i;break;}
returnc;
}
MGraph*CreatUDN(MGraph*G)//初始化图,接受用户输入
{
inti,j,k,w;
charv1[20],v2[20];
printf("请输入图的顶点数,弧数:
");
scanf("%d%d",&G->vexnum,&G->arcnum);
printf("结点名字:
\n");
for(i=0;i
printf("No.%d:
",i+1);
scanf("%s",G->vexs[i].name);}
for(i=0;i
for(j=0;j
G->arcs[i][j].adj=INFINITY;
printf("请输入一条边依附的两个顶点和权值:
\n");
for(k=0;k
{printf("第%d条边:
\n",k+1);
printf("起始结点:
");
scanf("%s",v1);
printf("结束结点:
");
scanf("%s",v2);
printf("边的权值:
");
scanf("%d",&w);
i=LocateVex(G,v1);
j=LocateVex(G,v2);
if(i>=0&&j>=0){
G->arcs[i][j].adj=w;
G->arcs[j][i]=G->arcs[i][j];
}}
returnG;
}
intFirstAdjVex(MGraph*G,intv)
{
inti;
if(v<=0&&v
for(i=0;i
if(G->arcs[v][i].adj!
=INFINITY)
returni;
}
return-1;
}
voidVisitFunc(MGraph*G,intv)
{
printf("%s",G->vexs[v].name);
}
intNextAdjVex(MGraph*G,intv,intw)
{
intk;
if(v>=0&&v
{
for(k=w+1;k
if(G->arcs[v][k].adj!
=INFINITY)
returnk;
}
return-1;
}
intvisited[MAX];
voidDFS(MGraph*G,intv)//从第v个顶点出发递归地深度优先遍历图G
{
intw;
visited[v]=1;
VisitFunc(G,v);//访问第v个结点
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!
visited[w]){
DFS(G,w);
printf("%d",G->arcs[v][w].adj);}
}
voidDFSTraverse(MGraph*G,char*s)//深度优先遍历
{intv,k;
for(v=0;v
visited[v]=0;
k=LocateVex(G,s);
if(k>=0&&k
for(v=k;v>=0;v--){
if(!
visited[v])
DFS(G,v);}
for(v=k+1;v
if(!
visited[v])
DFS(G,v);
}
}
typedefstructQnode
{
intvexnum;
structQnode*next;
}QNode,*QueuePtr;
typedefstruct
{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
intInitQueue(LinkQueue*Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q->front)exit(0);
Q->front->next=NULL;
return1;
}
voidEnQueue(LinkQueue*Q,inta)
{
QueuePtrp;
p=(QueuePtr)malloc(sizeof(QNode));
if(!
p)exit(0);
p->vexnum=a;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
intDeQueue(LinkQueue*Q,int*v)
{QueuePtrp;
if(Q->front==Q->rear)
{printf("结点不存在!
\n");exit(0);}
p=Q->front->next;
*v=p->vexnum;
Q->front->next=p->next;
if(Q->rear==p)
Q->front=Q->rear;
return*v;
}
intQueueEmpty(LinkQueue*Q)
{
if(Q->rear==Q->front)
return0;
return1;
}
intVisited[MAX];
voidBFSTraverse(MGraph*G,char*str)//广度优先遍历
{intw,u,v,k;
LinkQueueQ,q;
for(v=0;v
InitQueue(&Q);InitQueue(&q);
k=LocateVex(G,str);
for(v=k;v>=0;v--)
if(!
Visited[v])
{
Visited[v]=1;
VisitFunc(G,v);
EnQueue(&Q,v);//v入队
while(!
QueueEmpty(&Q))
{
DeQueue(&Q,&u);//出队
for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))
if(!
Visited[w])
{
Visited[w]=1;
VisitFunc(G,v);
EnQueue(&Q,w);
}
}
}
for(v=k+1;v
if(!
Visited[v])
{
Visited[v]=1;
VisitFunc(G,v);
EnQueue(&Q,v);//v入队
while(!
QueueEmpty(&Q))
{
DeQueue(&Q,&u);//出队
for(w=FirstAdjVex(G,u);w>=0;w=NextAdjVex(G,u,w))
if(!
Visited[w])
{
Visited[w]=1;
VisitFunc(G,v);
EnQueue(&Q,w);
}
}
}
}
voidmain()
{
MGraph*G,b;
charv[10];
G=CreatUDN(&b);
printf("请输入起始结点名称:
");
scanf("%s",v);
printf("\n深度优先遍历:
\n");
DFSTraverse(G,v);
printf("\n广度优先遍历:
\n");
BFSTraverse(G,v);
getch();
}
运行结果:
总结:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 参考
![提示](https://static.bingdoc.com/images/bang_tan.gif)