



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、教学计划编制问题问题描述:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等, 每个专业开设的课程都是确定的, 而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。基本要求:(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号 (固定占 3 位的字母数字串 )、学分和直接先修课的课程号。( 2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。(
2、3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。测试数据:学期总数: 6;学分上限: 10;该专业共开设 12 门课,课程号从 C01 到 C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。先修关系如下:课程编号课程名称先决条件C1程序设计基础无C2离散数学C1C3数据结构C1,C2C4汇编语言C1C5语言的设计和分C3,C4析C6计算机原理C11C7编译原理C5,C3C8操作系统C3,C6C9高等数学无C10线性代数C9C11普通物理C9C12数值分析C9,C10,C1实现提示可设学期总数不超过 12,课程总数不超
3、过 100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关系。#include#include#include#define null 0#define MAXNODE 64 /最大课程个数typedef structchar c3;cid; /课程号typedef struct Coursecid id3; / 课程号char name30; / 课程名floatxf; / 学分Course; /课程typedef struct PreCourseint adjvex; / 课程在数组中的下标struct PreCourse *pre;
4、 / 指向下一先修的课程节点 PreCourse;/ 先修的课程节点typedef structCourse course;/课程PreCourse *firstnext; / 指向第一个先修的课程节点CourseNode;/课程节点typedef structCourseNode coursesMAXNODE; /邻接表int xqs;/ 学期总数int num; / 课程的数目float xfsx;/ 学分上限AlGraph;/课程图typedef structint dataMAXNODE;/队中元素int f,r;/ 队头 r队尾 fqueue;int IsCricle=0;/判断是否
5、环1 表示是0 表示不是int jxq;/ 用于计算学期的/void queueinit(queue *q)/队初始化q-f=q-r=0;void queuein(queue *q,int x)/ 入队if(q-r+1)%MAXNODE=q-f)printf( 队满 n);exit(0);q-r=(q-r+1)%MAXNODE;q-dataq-r=x;int queueout(queue *q)/ 出队if(q-f=q-r)printf(exit(0);队空 n);q-f=(q-f+1)%MAXNODE;return q-dataq-f;int queueempty(queue *q)/队判空
6、1 为空if(q-f=q-r)return 1;else return 0;void creatpre(AlGraph *CGraph)/建立先修关系system(cls);/ 用来清屏int choice;fflush(stdin);/清空输入流int i,j,n;/临时变量PreCourse *p,*q;/临时变printf(n 建立先修关系:n);printf(n 请输入每一门课程号的编号:for(i=0;inum;i+);if(i%4=0)printf(n);printf(%d) ,i+1);printf(%st,CGraph-coursesi.course.id);printf(n请
7、根据以上的编号,输入每一门课程的先修课程(输入0 表示没有或结束) :n);for(i=0;inum;i+)printf(%s 的先修课程 :,CGraph-coursesi.course.id);scanf(%d,&j);n=0;while(j)while(jCGraph-num|j=i+1)if(j=i+1)printf( 先修课程号不能是本课程号);elseprintf( 输入的先修课程号不在该专业开设的课程序列中);fflush(stdin);/清空输入流printf( 重新输入 :);scanf(%d,&j);p=(PreCourse *)malloc(sizeof(PreCours
8、e);p-adjvex=j-1;p-pre=null;if(n=0)CGraph-coursesi.firstnext=p;q=CGraph-coursesi.firstnext;n+;elseq-pre=p;q=p;n+;scanf(%d,&j);printf( 1) 重新建立先修关系printf( 请选择 :);scanf(%d,&choice);if(choice=1)creatpre(CGraph);jxq=0;2)确定 n);AlGraph input()/ 输入并建立课程图AlGraph CGraph;int xqzs=0,kczs=0;/int i,j;/ 临时变量float x
9、f,xfsx=0;/临时变量printf( 教学计划编制nn);printf( 输入参数 :n);printf(1 、学期总数 :);scanf(%d,&xqzs);CGraph.xqs=xqzs;学期总数 :xqzsxf学分上限专业共开设课程数 :xfsx:kczsprintf(2 、专业共开设课程数:);scanf(%d,&kczs);CGraph.num=kczs;/课程数printf(3 、学分上限 (每个学期的学分上限都一样):);scanf(%f,&xfsx);CGraph.xfsx=xfsx;printf(4 、每门课的课程号(固定占 3 位的字母数字串)、课程名、学分:n);f
10、or(i=0;ixfsx|xf=0)printf( 本课程学分大于学期学分上限或小于等于零,请重新输入学分fflush(stdin);/清空输入流:);scanf(%f,&xf);CGraph.coursesi.course.xf=xf;CGraph.coursesi.firstnext=null;creatpre(&CGraph);/return CGraph;建立先修关系void output(AlGraph CGraph)/ 输出先修关系int i,j,n;/ 临时变量PreCourse *p;/ 临时变量printf( 先修关系如下:nn);printf( 课程编号 t 课程名称 tt
11、for(i=0;iadjvex;printf(%s,CGraph.coursesn.course.id);p=p-pre;j+;if(j=0)printf(无 );printf(n);void findoutdegree(AlGraph *CGraph,int outdegree)/ 找出度数,即找出每一门课程的先修课数int i;PreCourse *p;for(i=0;inum;i+)outdegreei=0;p=CGraph-coursesi.firstnext;while(p)outdegreei+;p=p-pre;void judgingcricle(AlGraph *CGraph,
12、queue *q2)/判断是否有环int outdegreeMAXNODE;/出度int i,m,j,pd=0;float xf=0;PreCourse *p;queue q;queueinit(&q);/队初始化findoutdegree(CGraph,outdegree);/ 找出度for(i=0;inum;i+)if(outdegreei=0&(xf+CGraph-coursesi.course.xf)xfsx)/ 出 度为零的,并且学分还没达到学分上限的入队,即没有先修课的课程入队queuein(&q,i);outdegreei-;xf+=CGraph-coursesi.course.
13、xf;m=0;xf=0;queuein(&q,-1);jxq+;while(1)i=queueout(&q);queuein(q2,i);if(i!=-1)m+;for(j=0;jnum;j+)if(j!=i)if(outdegreej=0&(xf+CGraph-coursesj.course.xf)xfsx)/将 之 前 因学分上限受制的出度为零的入队,即没有先修课的课程入队queuein(&q,j);outdegreej-;xf+=CGraph-coursesj.course.xf; elsep=CGraph-coursesj.firstnext;while(p)if(p-adjvex=i
14、)outdegreej-;if(outdegreej=0&(xf+CGraph-coursesi.course.xf)xfsx)/出 度 为 零的入队queuein(&q,j);outdegreej-;pd=1;xf+=CGraph-coursesi.course.xf;p=p-pre;elseif(pd)pd=0;queuein(&q,-1);jxq+;xf=0;else break;if(jxqCGraph-xqs)printf(n 错 误 报 告 : n 在 %d 学 期 内 是 无 法 修 完 这 些 课 程 n,CGraph-xqs);exit(0);if(mnum)printf(n
15、 错误报告: n);for(i=0;inum;i+)if(outdegreei0)printf(%s,CGraph-coursesi.course.id);printf( 存在循环,因此课程安排不了n);IsCricle=1;void layout1(AlGraph *CGraph,queue *q)/编排1/printf(n学生在各学期中的学习负担尽量均匀:nn);int i,j,xq=1,cxq=CGraph-xqs-jxq,ck20;float xf,m=CGraph-num/CGraph-xqs*1.0f;/m是每学期要学的课程数queue q1=*q;/while(!queueemp
16、ty(&q1)for(i=0;i20;i+)cki=-1;for(i=0;icoursesj.course.id);i+;xf+=CGraph-coursesj.course.xf;while(cki!=-1);printf( 获得学分是 %.2fn,xf);void layout2(AlGraph *CGraph,queue *q)/ 编排 2 printf(n 课程尽可能地集中在前几个学期中:nn);int i,j,xq=1;float xf;printf(n 第 %d 学期学: ,xq+);xf=0;queue q1=*q;/for(i=0;inum;)j=queueout(&q1);i
17、f(j!=-1)printf( %s ,CGraph-coursesj.course.id);i+;xf+=CGraph-coursesj.course.xf; else printf( 获得学分是 %.2fn 第 %d 学期学: ,xf,xq+);xf=0;while(xqxqs)printf( 获得学分是 %.2fn 第 %d 学期学:无 t,xf,xq+);xf=0; printf( 获得学分是 %.2fn);void main()int choice;queue q;/用来存放已编排好的课程queueinit(&q);/队初始化AlGraph CGraph;/ 课程图fflush(stdin);/清空输入流CGraph=input();/ 输入并建立课程图system(cls);/ 用来清屏output(CGraph);/输出先修关系printf(nn)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广西壮族自治区贵港市医疗三严三基理论考试模拟试题及答案
- 2024年《服装缝纫工、裁剪工》岗位从业资格证理论及技术知识考试题与答案
- 汽车电气技术试题及答案
- 6万吨工业级混合油项目可行性研究报告模板-立项拿地
- 2025关于上海市的房屋租赁合同
- 2025年:探寻民间借款合同的真相
- 2025金华小学教材购买合同
- 2025设备租赁合同的签订与违约索赔
- 2025简易二手店铺转让合同范本下载
- 2025汽车维修合同简易版范本
- 室间隔缺损教学查房
- 2024年《档案法》知识竞赛100题及答案
- 传奇辅助脚本
- 孕产妇健康知识宣传栏
- 等高线地形图的判读的说课课件
- 部委管理制度
- 动车组随车机械师-动车组随车机械师作业标准
- 硬膜外血肿护理课件
- 农村饮水安全巩固提升
- 哺乳期乳房内化脓介绍演示培训课件
- 卵巢过度刺激综合征(OHSS)
评论
0/150
提交评论