课程设计报告参考.docx

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

课程设计报告参考.docx

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

课程设计报告参考.docx

课程设计报告参考

红河学院工学院

专业:

计算机科学与技术

年级:

2007级

学号:

200703050215

姓名:

XXXXXXX

成绩:

红河学院工学院编制

说明

1、本报告供学生课程设计时使用。

2、学生应认真阅读所学课程配套的相关资料。

3、课程设计报告里面的内容要手工填写,以备存档使用(源程序可打印)。

4、课程设计的总评成绩根据课程的性质,按一定比例计入该门课程成绩。

5、报告中的“设计方法、设计技术路线、设计成果及总结分析”中的内容是评分的主要依据,如果不够书写,可以自行添加附页。

6、按规定的时间提交报告给教师评定成绩,由任课教师交到工学院存档。

课程设计目录

课程名称:

数据结构与算法

任务序号

任务名称

起止页码

1

图的遍历

3---11

2

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

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

#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;ivexnum;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;ivexnum;i++){

printf("No.%d:

",i+1);

scanf("%s",G->vexs[i].name);}

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

G->arcs[i][j].adj=INFINITY;

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

\n");

for(k=0;karcnum;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&&vvexnum){//v合理

for(i=0;ivexnum;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&&vvexnum&&w>=0&&wvexnum)//v,w合理

{

for(k=w+1;kvexnum;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;vvexnum;v++)

visited[v]=0;

k=LocateVex(G,s);

if(k>=0&&kvexnum){

for(v=k;v>=0;v--){

if(!

visited[v])

DFS(G,v);}

for(v=k+1;vvexnum;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;vvexnum;v++)Visited[v]=0;

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

}

运行结果:

总结:

设计任务

(2)

任务

名称

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

班级

2007级1班

指导

教师

许海成

地点

红河学院

成绩

学年

2008-2009

开始

日期

2008-12-20

结束

日期

2009-2-25

组员

设计目的及要求:

目的:

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

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

要求:

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

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

(3)按要求编写程序。

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

设计内容及基本要求:

内容:

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

基本要求:

(1)文件操作功能:

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

(2)家谱操作功能:

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

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

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

设计成果及总结分析:

(设计成果包括程序清单、测试数据、指定的功能模块说明、设计说明,程序清单可打印,总结分析要手写)

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

当前位置:首页 > 考试认证 > 司法考试

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

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