课程设计报告参考Word格式.docx

上传人:b****6 文档编号:20968069 上传时间:2023-01-26 格式:DOCX 页数:14 大小:49.92KB
下载 相关 举报
课程设计报告参考Word格式.docx_第1页
第1页 / 共14页
课程设计报告参考Word格式.docx_第2页
第2页 / 共14页
课程设计报告参考Word格式.docx_第3页
第3页 / 共14页
课程设计报告参考Word格式.docx_第4页
第4页 / 共14页
课程设计报告参考Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

课程设计报告参考Word格式.docx

《课程设计报告参考Word格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告参考Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

课程设计报告参考Word格式.docx

用二叉树表示一个家谱关系

12---15

设计任务

(1)

任务

名称

班级

2007级1班

指导

教师

许海成

地点

红河学院

成绩

学年

2008-2009

开始

日期

2008-12-20

结束

2009-2-25

组员

设计目的及要求:

目的:

(1)进一步加深对图的表示,存储、定义的理解,并能够掌握图的遍历,以及它在程序中的使用方法。

(2)掌握软件设计的基本内容和设计方法,并能培养进行规范化软件设计能力。

要求:

(1)首先要分析题目,查阅相关资料。

(2)清晰的设计出整个程序的思路。

(3)按要求编写程序。

(4)写出运行结果,并分析结果。

设计内容及基本要求:

内容:

建立有向图的存储结构,能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的深度优先遍历和广度优先遍历的结果。

基本要求:

(1)要给出整个设计的框架说明,并描述所设计程序的各个函数功能。

(2)要求能全面的测试所设计程序的功能;

同时给出程序的测试情况,并分析运行结果。

(3)要求程序又充分的注释语句,至少要注释每个函数参数的含义和函数返回值的含义。

(4)多查阅与之相关的资料,确保程序中的语句定义,格式准确无误。

(5)书写规范。

采用的设计方法、设计技术路线:

(包括本任务的总体安排和进度、采用的设计方法和步骤以及任务流程图、可能遇到的问题和解决的方法)

设计方法及步骤:

(1)首先定义头文件以及相应的宏,然后再定义三个结构体(其中最重要的结构体是一个含3个成员的结构体,且结构体变量为Mgraph);

(2)创建图。

包括顶点数,边数的输入,以及各顶点(为字符)的输入。

(3)定义图中各顶点之间的关系为0(即无关联)。

(4)利用for循环将每一条边的起点与终点输入,并将输入的边的起点、终点与输入的有向图顶点不复合的边,赋值为1。

(5)定义主函数。

主函数中包括,调用创建图的函数,并输出该图的深度优先遍历和广度优先遍历的结果。

任务总体安排:

2008-12-20~2009-1-30完成课程设计所要求的全部任务。

进度安排:

2008-12-20~2008-12-31:

上网查找与题目相关的资料,并重点阅读课本上的相关知识。

2009-1-2~2009-1-10:

对问题进行抽象,得到描述问题的算法,编写出程序。

2009-1-11~2009-1-20:

设计完整的程序进行演示。

2009-1-21~2009-1-31:

对设计进行总结分析。

2009-2-1~2009-2-25:

填写课程设计手册,并提交指导教师。

任务流程图:

定义头文件----------定义结构体----------创建图----------主函数----------运行----------输出深度优先遍历和广度优先遍历的结果。

可能遇到的问题:

(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<

stdlib.h>

stdio.h>

conio.h>

string.h>

typedefstructArCell{

intadj;

}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedefstruct

{

charname[20];

}infotype;

infotypevexs[MAX_VERTEX_NUM];

AdjMatrixarcs;

intvexnum,arcnum;

}MGraph;

intLocateVex(MGraph*G,char*v)

{intc=-1,i;

for(i=0;

i<

G->

vexnum;

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"

&

vexnum,&

arcnum);

结点名字:

\n"

i++){

No.%d:

i+1);

%s"

G->

vexs[i].name);

for(j=0;

j<

j++)

arcs[i][j].adj=INFINITY;

请输入一条边依附的两个顶点和权值:

for(k=0;

k<

arcnum;

k++)

{printf("

第%d条边:

k+1);

起始结点:

v1);

结束结点:

v2);

边的权值:

%d"

w);

i=LocateVex(G,v1);

j=LocateVex(G,v2);

if(i>

=0&

&

j>

=0){

arcs[i][j].adj=w;

arcs[j][i]=G->

arcs[i][j];

}}

returnG;

intFirstAdjVex(MGraph*G,intv)

inti;

if(v<

=0&

v<

vexnum){//v合理

for(i=0;

if(G->

arcs[v][i].adj!

=INFINITY)

returni;

}

return-1;

voidVisitFunc(MGraph*G,intv)

%s"

vexs[v].name);

intNextAdjVex(MGraph*G,intv,intw)

intk;

if(v>

v<

vexnum&

w>

w<

vexnum)//v,w合理

{

for(k=w+1;

arcs[v][k].adj!

returnk;

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);

%d"

arcs[v][w].adj);

voidDFSTraverse(MGraph*G,char*s)//深度优先遍历

{intv,k;

for(v=0;

v++)

visited[v]=0;

k=LocateVex(G,s);

if(k>

vexnum){

for(v=k;

v>

v--){

visited[v])

DFS(G,v);

for(v=k+1;

typedefstructQnode

intvexnum;

structQnode*next;

}QNode,*QueuePtr;

QueuePtrfront;

QueuePtrrear;

}LinkQueue;

intInitQueue(LinkQueue*Q)

Q->

front=Q->

rear=(QueuePtr)malloc(sizeof(QNode));

front)exit(0);

front->

next=NULL;

return1;

voidEnQueue(LinkQueue*Q,inta)

QueuePtrp;

p=(QueuePtr)malloc(sizeof(QNode));

p)exit(0);

p->

vexnum=a;

p->

rear->

next=p;

rear=p;

intDeQueue(LinkQueue*Q,int*v)

{QueuePtrp;

if(Q->

front==Q->

rear)

结点不存在!

exit(0);

p=Q->

next;

*v=p->

next=p->

if(Q->

rear==p)

Q->

rear;

return*v;

intQueueEmpty(LinkQueue*Q)

rear==Q->

front)

return0;

intVisited[MAX];

voidBFSTraverse(MGraph*G,char*str)//广度优先遍历

{intw,u,v,k;

LinkQueueQ,q;

v++)Visited[v]=0;

InitQueue(&

Q);

q);

k=LocateVex(G,str);

v--)

Visited[v])

Visited[v]=1;

VisitFunc(G,v);

EnQueue(&

Q,v);

//v入队

while(!

QueueEmpty(&

Q))

DeQueue(&

Q,&

u);

//出队

for(w=FirstAdjVex(G,u);

w=NextAdjVex(G,u,w))

if(!

Visited[w])

{

Visited[w]=1;

EnQueue(&

Q,w);

voidmain()

MGraph*G,b;

charv[10];

G=CreatUDN(&

b);

请输入起始结点名称:

v);

\n深度优先遍历:

DFSTraverse(G,v);

\n广度优先遍历:

BFSTraverse(G,v);

getch();

运行结果:

总结:

设计任务

(2)

(1)进一步加深对二叉树的表示,存储、定义的理解,并能够熟悉的掌握二叉树的应用,以及它在程序中的使用方法。

设计一个程序,采用二叉树表示一个家谱关系。

(1)文件操作功能:

记录输入、记录输出,清除全部文件记录和将家谱记录存盘。

(2)家谱操作功能:

用括号表示法输出家谱二叉树,查找某人所有的儿子,查找某人所有的祖先。

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1