ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:242.64KB ,
资源ID:9599994      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9599994.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(教学计划编制问题.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

教学计划编制问题.docx

1、教学计划编制问题湖南工程学院课 程 设 计 任 务 书课程名称 数据结构课程设计 课 题 教学计划编制问题 专业班级 信息与计算科学1202班 学生姓名 贾亦 学 号 201210010220 指导老师 刘长松 陈华光 陈多 审 批 任务书下达日期: 2014 年 6 月6 日任务完成日期: 2014 年 6 月 25 日目录一、课题的主要功能1.1程序的功能大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可

2、以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。本程序针对本科的学期内容,通过输入实际的课程及先后关系。结合每学期的学分及课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。1.2.输入输出的要求输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。输出要求输出各门课程所对应的学分,以及每学期各门课程的安排。二、课题的功能模块的划分2.1程序的模块组成LocateVex():图的邻接表存储的基本操作CreateGraph():构造生成树Display():输出图的邻接矩阵FindInDegree()

3、:求顶点的入度InitStack():构造一个空栈ClearStack():清空栈StackEmpty():判断是否为空栈Pop():出栈Push():入栈TopologicalSort():输出G顶点的拓扑排序结果2.2模块的层次结构及调用关系2.3模块的主要功能见“详细设计”“主要函数流程图”2.4数据结构和数据库结构储存的数据为结构体类型数组,以及结构体单链表结点类型。1)typedef struct ArcNode弧所指定点位置指向下一条弧的指针网的权值指针intstructInfoType2)typedef struct顶点信息第一个表结点的地址VertexTypeArcNode三主

4、要功能的实现3.1采用C语言定义相关的数据类型。其中包括字符常量,整型,字符型,字符串型,typedef 定义的类型,结构体型,单链表节点类型,结构体数组。3.2主要函数的流程图1.LocateVex():图的邻接表存储的基本操作。由初始条件: 图G存在,u和G中顶点有相同特征转而进行判断,若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。图LocateVex()图CreateGraph() 图Display()2.CreateGraph():构造生成图。采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图)。3.Display():输出图的邻接矩阵。采用循环设置输出图的邻接矩

5、阵。4.FindInDegree():求顶点的入度。 图FindInDegree() 图InitStack()5.InitStack():构造一个空栈。6.ClearStack():清空栈。7.StackEmpty():判断栈是否为空。若栈S为空栈,则返回TRUE,否则返回FALSE。8.Pop():出栈。若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。9.Push():入栈。插入元素e为新的栈顶元素。10.TopologicalSort():输出G顶点的拓扑排序结果。有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, 否则返回ERRO

6、R。3.3画出各函数的调用关系图StackEmpty( )ClearStack( )FindInDegree( )Push ( )StackEmpty( )Pop( )FindInDgree( )Push ( )InitStack( )Tolopogicalsort( )Main函数Display( )CreatGraph( )四、程序调试4.1测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。数据如下:学期总数:6;学分上限:10;该专业共开设课数:12课程号:从C01

7、到C12;学分顺序:2,3,4,3,2,3,4,4,7,5,2,3。先修顺序:4.2使用说明输入学期总数,学分上限,课程数,先修关系边数,课程代表符号,相对学分值输入完成后执行可得到每个学期的课程结果五总结5.1 程序调试中遇到的问题以及解决问题的方法。由于程序十分的复杂,遇到了很多常见的语法错误,及逻辑错误。这需要我们不断的调试分析。符号的格式之类,指针的用法,判断输入输出的条件都是十分容易出错的地方。在逐条排除,向同学老师请教后,程序终于得以完成。这让我明白了,解决问题,要细心认真,集思广益,这样才能把问题解决。5.2 课程设计过程经验教训、心得体会。虽然在大一我们已经学习了C语言,但是,

8、直到本期我们才开设了数据结构这一门课程。这门课程让我们对程序的原理有了系统的认识。对以往模糊的经验,起了总结提升的作用。在学习了这门课程后,我们进行了2个星期的课程设计,以实践我们的学习内容。在这次课程设计中,我被分配到了教学计划课程编制问题,开始感觉很难,因为我从未编写过如此复杂的程序。在多方查找资料并参考类似程序后,我大体将程序的构架描绘好了。一边对照着网上的资料,一边对程序进行修改补充,然后根据拟好的大纲进行编制。期间,我与其它同学进行了讨论和探究,对程序的细节问题和应用方面进行了探索,并解决了主要的问题,于是便着手写具体的程序。这次实验,我进行了大量的资料查阅,包括向老师请求帮助解释题

9、目要求,对所学知识进行复习。通过这些努力,我对算法有了更深入的理解,对编程的步骤,有了具体的体会。通过和同学的广泛交流,我体会到了合作的必要性及合作的优势。更重要的是,这个课题完全脱胎于实际问题,让我对计算机行业,充满了信心和自豪。以往我们学的计算机知识一般停留在理论上,这让我们不太理解计算机的应用和前景,而较少注重我们对算法的实践锻炼。而这一次的实习既需要我们去联系理论,又需要我们去实践方法,很多东西看上去都学过,但是和实际联系才知道变通的艰难。纸上得来终觉浅,这是我这次实习的最大收获。这次的实验让我们知道该如何跨过实际和理论之间的鸿沟。这次实习,我认识到了以下几个方面。第一就是要合作。不懂

10、的问题一定要向同学,老师请教。这样才能集思广益,有利于问题的解决。也能够让自己节省时间,有效率的完成工作。齐心协力完成这个程序,互相帮助,这是我们同做课题的同学的共同体会。第二就是要细心。程序的编制难免会出现错误,不能一次成功,出现错误后,一定要认真细心耐心的排查,这样千锤百炼,程序才能完成。在浮躁的时候能够静下心来思考,是极其重要的。第三就是要学习。学习网上已经有的类似程序,学习他们的方法与思想。这样,才能最快的了解问题,得到启迪。这两个星期的课程设计,让我受益匪浅。它不只对我们专业知识进行了加强,还锻炼了我们的思维能力,合作的精神,是我们理论与实际想结合。这些都是在书本上难以学习到的。这些

11、弥足珍贵的经验和记忆,使我对我的未来从事的工作充满了信心,而最终程序的运行成功使我得到了莫大的满足。在日后的学习中,我会更加重视知识的积累,学好算法,为成为一名优秀的计算机专业人才努力。六、附录6.1参考书目1.数据结构教程 李春葆等 编著 清华大学出版社2.数据结构教程上机实验指导 李春葆等 编著 清华大学出版社6.2源程序清单(带注释)#include #include #include / malloc()等 #include / INT_MAX等 #include / EOF(=Z或F6),NULL #include / atoi()52 #include / eof() #inclu

12、de / floor(),ceil(),abs() #include / exit() #include / cout,cin / 函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; / Status是函数的类型,其值是函数结果状态代码,如OK等 typedef int Boolean; / Boolean是布尔类型,其值是TRUE或FALSE #define MAX_NAME 10 /* 顶点字符串的最大长度*/ #defi

13、ne MAXCLASS 100 int Z=0; int X=0; int xqzs,q=1,xfsx; typedef int InfoType; typedef char VertexTypeMAX_NAME; /* 字符串类型*/ /* 图的邻接表存储表示*/ #define MAX_VERTEX_NUM 100 typedef enumDGGraphKind; /* 有向图,有向网,无向图,无向网 */ typedef struct ArcNode int adjvex; /* 该弧所指向的顶点的位置*/ struct ArcNode *nextarc; /* 指向下一条弧的指针*/

14、InfoType *info; /* 网的权值指针)*/ ArcNode; /* 表结点*/ typedef struct VertexType data; /* 顶点信息*/ ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针*/ VNode,AdjListMAX_VERTEX_NUM; /* 头结点*/ typedef struct AdjList vertices,verticestwo; int vexnum,arcnum; /* 图的当前顶点数和弧数*/ int kind; /* 图的种类标志*/ ALGraph;/* 图的邻接表存储的基本

15、操作*/ int LocateVex(ALGraph G,VertexType u) /* 初始条件: 图G存在,u和G中顶点有相同特征*/ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ int i; for(i=0;iG.vexnum;+i) if(strcmp(u,G.verticesi.data)=0) return i; return -1;Status CreateGraph(ALGraph *G) /* 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) */ int i,j,k; VertexType va,vb; ArcNode

16、*p; printf(请输入教学计划的课程数: ); scanf(%d,&(*G).vexnum); printf(请输入拓扑排序所形成的课程先修关系的边数: ); scanf(%d,&(*G).arcnum); printf(请输入%d个课程的代表值(%d个字符):n,(*G).vexnum,MAX_NAME); for(i=0;i(*G).vexnum;+i) /* 构造顶点向量*/ scanf(%s,(*G).verticesi.data); (*G).verticesi.firstarc=NULL; printf(请输入%d个课程的学分值(%d个字符):n,(*G).vexnum,MA

17、X_NAME); for(i=0;i(*G).vexnum;+i) /* 构造顶点向量*/ scanf(%s,(*G).verticestwoi.data); printf(请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):n); for(k=0;kadjvex=j; p-info=NULL; /* 图*/ p-nextarc=(*G).verticesi.firstarc; /* 插在表头*/ (*G).verticesi.firstarc=p; return OK; void Display(ALGraph G) /* 输出图的邻接矩阵G */ int i; ArcNode *p; s

18、witch(G.kind) case DG: printf(有向图n); printf(%d个顶点:n,G.vexnum); for(i=0;iG.vexnum;+i) printf(%s ,G.verticesi.data); printf(n%d条弧(边):n,G.arcnum); for(i=0;iadjvex.data); p=p-nextarc; printf(n); void FindInDegree(ALGraph G,int indegree) /* 求顶点的入度,算法调用*/ int i; ArcNode *p; for(i=0;iG.vexnum;i+) indegreei

19、=0; /* 赋初值*/ for(i=0;iadjvex+; p=p-nextarc; typedef int SElemType; /* 栈类型*/ /*栈的顺序存储表示*/ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/ #define STACKINCREMENT 2 /* 存储空间分配增量*/ typedef struct SqStack SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */ SElemType *top; /* 栈顶指针*/ int stacksize; /* 当前已分配的存储空间,以元素为单

20、位*/ SqStack; /* 顺序栈*/ /* 顺序栈的基本操作*/ Status InitStack(SqStack *S) /* 构造一个空栈S */ (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!(*S).base) exit(OVERFLOW); /* 存储分配失败*/ (*S).top=(*S).base; (*S).stacksize=STACK_INIT_SIZE; return OK;void ClearStack(SqStack *S) /清空栈的操作 S-top=S-base;St

21、atus StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ if(S.top=S.base) return TRUE; else return FALSE; Status Pop(SqStack *S,SElemType *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ if(*S).top=(*S).base) return ERROR; *e=*-(*S).top; return OK; Status Push(SqStack *S,SElemType e) /* 插入元素e为新的栈顶元素

22、*/ if(*S).top-(*S).base=(*S).stacksize) /* 栈满,追加存储空间*/ (*S).base=(SElemType *)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(SElemType); if(!(*S).base) exit(OVERFLOW); /* 存储分配失败*/ (*S).top=(*S).base+(*S).stacksize; (*S).stacksize+=STACKINCREMENT; *(*S).top)+=e; return OK; typedef int pathone

23、MAXCLASS;typedef int pathtwoMAXCLASS;Status TopologicalSort(ALGraph G) /* 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, */ /* 否则返回ERROR。*/ int i,k,j=0,count,indegreeMAX_VERTEX_NUM; bool has=false; SqStack S; pathone a; pathtwo b; ArcNode *p; FindInDegree(G,indegree); /* 对各顶点求入度indegree0.vernum-1 */ InitS

24、tack(&S); /* 初始化栈*/ for(i=0;iG.vexnum;+i) /* 建零入度顶点栈S */ if(!indegreei) Push(&S,i); /cout*G.verticesi.datanextarc) /* 对i号顶点的每个邻接点的入度减*/ k=p-adjvex; if(!(-indegreek) /* 若入度减为,则入栈*/ Push(&S,k); /cout*G.verticesi.dataendl; if(countG.vexnum) printf(此有向图有回路n); return ERROR; else printf(为一个拓扑序列。n); has=tr

25、ue; FindInDegree(G,indegree); /* 对各顶点求入度indegree0.vernum-1 */ ClearStack(&S); cout=课程计划如下=endl; int qq=1; /学期数 int xxf; while(qq=xqzs) int result20; int rtop=0; int nn=0; /int ccount=0; / 学期学分计算 xxf=0; for(i=0;ixfsx) break; indegreei-; for(p=G.verticesi.firstarc;p;p=p-nextarc) /* 对i号顶点的每个邻接点的入度减*/ k=p-adjvex; indegreek-; /* if(!(-indegreek) 若入度减为,则入栈 Push(&S,k); */ resultrtop=i; rtop+; cout第qq个学期的课程为:endl; for(nn=0;nnrtop;nn+) cout课程G.verticesresultnn.dataendl; qq+; return OK;void main() ALGraph f; printf(教学计划编制问题的数据模型为拓扑排序AOV-网结构。n); printf(以下为教学计划编制问题的求解过程:n); printf(请输入学期总数:); scanf(%

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

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