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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

430佘江维教学计划编制问题.docx

1、430佘江维教学计划编制问题目 录摘 要 1前 言 2正 文 31. 采用类c语言定义相关的数据类型 32. 各模块的伪码算法 63. 函数的调用关系图 154. 调试分析 185. 测试结果 196. 源程序(带注释) 22总 结 33参考文献 34致 谢 35附件 部分源程序代码 36摘 要大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。每个课程的先修关系都是确定的,可以有任意多门,也可以没有。每一门课程恰好一个学期。试在这样的情况下设置一个教学计划编制

2、程序。在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息。关键词: 教学计划; 编制; 培养目标; 管理;前 言教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。是稳定教学秩序、提高教学质量的重要保证。从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提

3、高教育教学水平。教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合. 教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。使用C程序设计语言,研究开发教学计划编制系统Web应用系统。近代以来,特别是在实行学科课程的条件下,教学计划主要是学科的计划,或只是学科表。随着社会经济和科学技术的新发展,教育结构不断发生变革,现代教育和教学理论主张对教学计划的结构实行改革。除了教学以外,生产劳动、科技活动、发展体力和增进健康的活动、艺术活动和社会活动

4、等也应列入教学计划。下面就利用对此进行程序设计,已达到预期的目的。正 文1.采用类c语言定义相关的数据类型(1)、主程序: int main() /主函数 int numterm; /学期总数 int uplcredit; /一个学期的学分上限 int selectway; ALGraph G; printf(请输入学期总数:n); scanf(%d,&numterm); printf(请输入一个学期的学分上限:n); scanf(%d,&uplcredit); CreatGraph(&G); printf(请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量 均匀分布n); scan

5、f(%d,&selectway); if(selectway=1) TopologicalSort_1(G,numterm,uplcredit); if(selectway=2) TopologicalSort_2(G,numterm,uplcredit); system(pause); return 0; (2)、头结点,表结点,邻接表的定义:#define MAX_VERTEX_NUM 100 /最大课程总数typedef struct ArcNode int adjvex; struct ArcNode *nextarc; ArcNode;typedef struct VNode cha

6、r name24; /课程名 int classid; /课程号 int credit; /课程的学分 int indegree; /该结点的入度 int state; /该节点的状态 ArcNode *firstarc; /指向第一条依附该顶点的弧的指针 VNode,AdjListMAX_VEXTEX_NUM;typedef struct AdjList vertices; int vexnum, arcnum; ALGraph;邻接表的基本操作:void CreatGraph(ALGraph *);创建邻接表void FindInDegree(ALGraph , int * );求一个结点

7、的入度void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程(3)、栈的定义:#define STACk_INIT_SIZE 100 /存储空间的初时分配量#define STACKINCREMENT 10 /存储空间的分配增量typedef int ElemType;typedef struct AdjList vertices; int vexnum, arcnum; A

8、LGraph;基本操作:void InitStack (SqStack *S);栈的初始化int StackEmpty(SqStack S);判断栈是否为空void Push(SqStack *S, int );入栈操作int Pop(SqStack *S, int *e);出栈操作2.各模块的伪码算法 图的相关算法:typedef int InfoType;typedef struct ArcNode int adjvex;/* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc;/* 指向下一条弧的指针 */ InfoType *info;/* 网的权值指针) *

9、/ ArcNode;/* 表结点 */3.函数的调用关系图 typedef enumDGGraphKind; /* 有向图,有向网,无向图,无向网 */ typedef struct AdjList vertices,verticestwo; int vexnum,arcnum; /* 图的当前顶点数和弧数 */ int kind; /* 图的种类标志 */ ALGraph;void CreatGraph(ALGraph *G) /构造图int i, m, n; ArcNode *p; printf(请输入需要编排课程总数:tt); scanf(%d,&G-vexnum); printf(请依

10、次输入课程名、课程号、课程学分nn); printf(t课程名tt课程号tt课程学分nn); printf(t); for( i=1;ivexnum;i+)/* 构造顶点向量 */ scanf(%s %d %d,&G-verticesi.name,&G-verticesi.classid,&G-verticesi.credit); printf(t); G-verticesi.indegree=0; G-vertices i.state=0; G-verticesi.firstarc=NULL; printf(请输入课程先修关系总数:); scanf(%d,&G-arcnum); printf

11、(请顺序输入每个课程先修关系(先修课程在前并以逗号作为间隔):n); for (i = 1; i arcnum; i+) printf(n请输入存在先修关系的两个课程的序号:); scanf(%d,%d,&n,&m); while (n G-vexnum | m G-vexnum) printf(输入的顶点序号不正确 请重新输入:); scanf(%d,%d,&n,&m); p = (ArcNode*)malloc(sizeof(ArcNode); if (p = NULL) printf(memory allocation failed,goodbey); exit(1); p-adjvex

12、 = m; p-nextarc = G-verticesn.firstarc; G-verticesn.firstarc = p; printf(n建立的邻接表为:n); /输出建立好的邻接表 for(i=1;ivexnum;i+) printf(%d:-,G-verticesi.classid); for(p=G-verticesi.firstarc;p!=NULL;p=p-nextarc) printf(%d-,p-adjvex); printf(NULL); printf(n); void FindInDegree(ALGraph G, int indegree) /求图中各节点的入度

13、int i; ArcNode *p; for (i = 1; i = G.vexnum; i+) indegreei = 0;/赋初值 for (i = 1; i adjvex+; p=p-nextarc; void TopologicalSort_1(ALGraph G,int numterm,int uplcredit) /拓扑排序算法1 FILE *fp; fp=fopen(bianpai.txt,w); ArcNode *p; SqStack S; int indegree MAX_VERTEX_NUM ;/存放各节点的入度 int i,j,k; int count; /课程编排数目计

14、数器 int sumcredit;/每个学期的课程学分累加器 FindInDegree(G, indegree); for (i = 1; i = G.vexnum; i+) G.verticesi.indegree=indegreei; InitStack(&S); count=0; k=0; while(count!=G.vexnum & k=numterm) sumcredit=0; for(i=1;i=G.vexnum;i+) /入度为零的节点入栈,即无先修的课程入栈 if(G.verticesi.indegree=0)&(G.verticesi.state=0) Push(&S,i)

15、; G.verticesi.state = 1;/避免入度为零节点重复入栈 if(!StackEmpty(&S)&(sumcredit=uplcredit) k= k+1; printf(n); printf(第%d个学期学得课程有:n,k); sumcredit = 0; for(i=1;i=G.vexnum;i+)/入度为零的节点入栈,即无先修的课程入栈 if(G.verticesi.indegree=0)&(G.verticesi.state=0) Push(&S,i); while(!StackEmpty(&S)&(sumcredituplcredit)/栈非空&学分总数小于学分上限

16、Pop(&S,&j); sumcredit = sumcredit + G.verticesj.credit; if(sumcredit nextarc)/对j号顶点每个邻接点的入度减一 G.verticesp-adjvex.indegree-; else Push(&S,j);/将未输出的节点重新压入栈 fprintf(fp,n); printf(n); if(countG.vexnum) printf(n课程编排出错n); else printf(n课程编排成功n); fclose(fp);void TopologicalSort_2(ALGraph G,int numterm,int u

17、plcredit) /拓扑排序算法2 FILE *fp; fp=fopen(bianpai2.txt,w); ArcNode *p; SqStack S; int indegree MAX_VERTEX_NUM ; int i,j, k, m,n; int maxnum; int sumnum; int count; /课程编排数目计数器 int sumcredit;/每个学期的课程学分累加器 FindInDegree(G, indegree); for (i = 1; i = G.vexnum; i+) G.verticesi.indegree = indegreei; InitStack(

18、&S); count=0; k=0; maxnum = G.vexnum/numterm+1; sumnum = 0; while(count!=G.vexnum & k=numterm) for(i=1;i=G.vexnum;i+) if(G.verticesi.indegree=0)&(G.verticesi.state=0) Push(&S,i); G.verticesi.state = 1; if(!StackEmpty(&S)&(sumcredit=uplcredit)&(sumnum=maxnum) k= k+1; /*printf(n);*/ printf(第%d个学期学得课程有

19、:,k); sumcredit = 0; sumnum = 0; for(i=1;i=G.vexnum;i+)/入度为零的节点入栈,即无先修的课程入? if(G.verticesi.indegree=0)&(G.verticesi.state=0) Push(&S,i); while(!StackEmpty(&S)&(sumcredituplcredit)&(sumnummaxnum)/栈非空&学分总数小于学分上限&学期课程数目小于学期最大数目 Pop(&S,&j);/出栈 sumcredit = sumcredit + G.verticesj.credit; sumnum =sumnum+1

20、; if(sumcredit = uplcredit)&(sumnum nextarc)/对j号顶点每个邻接点的入度减一 G.verticesp-adjvex.indegree-; else Push(&S,j); fprintf(fp,n); printf(n); if(countbase=(int *)malloc( STACk_INIT_SIZE *sizeof(int); if (!S-base) printf(ERROR); exit(1); S-top=S-base; S-stacksize=STACk_INIT_SIZE;int StackEmpty(SqStack *S)/判断

21、栈是否为空 if(S-top=S-base) return OK; else return ERROR;void Push(SqStack *S,int e)/入栈操作 if(S-top - S-base = S-stacksize) S-base = (int *) realloc (S-base , (S-stacksize + STACKINCREMENT) * sizeof(int); if(!S-base) printf(ERROR); exit(1); S-top = S-base + S-stacksize; S-stacksize += STACKINCREMENT; *S-t

22、op+ = e;int Pop(SqStack *S, int *e)/出栈操作 if(S-top = S-base) exit(1); *e = * -S-top; return 0;3.函数的调用关系图流程图如下所示:(1)、void FindInDegree(ALGraph G, int indegree)/求图中各节点的入度(如图1)void CreatGraph(ALGraph *G)/构件图(如图2) 图1 图2(2)、void TopologicalSort_1(ALGraph G,int numterm,int uplcredit) /有向图G采用邻接表存储结构(如图3)voi

23、d TopologicalSort_2(ALGraph G,int numterm,int uplcredit) /有向图G采用邻接表存储结构(如图4) 图3 图4(3)、void main()/主函数 (如图5)主函数:void main()图54.调试分析a、 调试中遇到的问题及对问题的解决方法我在实验过程中遇到的最大难题是两个课程排序算法的编写。刚开始的时候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。经过三天的修改,终于写出了符合要求的排序算法。b、算法的时间复杂度和空间

24、复杂度算法的时间复杂度是指算法编程后在机器中所耗费的时间。该程序在图的构造算法中的时间复杂度为O(G-vexnum)+O(G-arcnum),在求节点入度的算法的时间复杂度为O(G.vexnum)2),拓扑排序算法中的时间复杂度为O(G.vexnum)2)。算法的空间复杂度是指算法编程后在机器中所占的存储量。该程序中所要存储的变量为G-verticesi.name,G-verticesi.classid,G-verticesi.credit,则其空间复杂度为S(G-vexnum)。5.测试结果使用VC+,打开教学计划编制问题.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。要

25、求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。然后还要输入课程先修课程总数,可以算出有16种关系,分别输出。接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里。显示如下图a、b: 图a图b编排策略1(课程竟可能集中到前几个学期)编排成功结果如下图所示:编排策略2(课程尽量均匀分布)编排成功结果如下图所示:6.源程序(带注释)#include stdio.h#include stdlib.h#include string.h#include math.h#include malloc.h#include ctype.h#include limits.h#include io.h#include process.h #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int InfoType;#define MAX_VERTEX_NUM 100typedef struct ArcNode int

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

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