教学计划编制Word文件下载.docx

上传人:b****2 文档编号:3603352 上传时间:2023-05-02 格式:DOCX 页数:15 大小:18.78KB
下载 相关 举报
教学计划编制Word文件下载.docx_第1页
第1页 / 共15页
教学计划编制Word文件下载.docx_第2页
第2页 / 共15页
教学计划编制Word文件下载.docx_第3页
第3页 / 共15页
教学计划编制Word文件下载.docx_第4页
第4页 / 共15页
教学计划编制Word文件下载.docx_第5页
第5页 / 共15页
教学计划编制Word文件下载.docx_第6页
第6页 / 共15页
教学计划编制Word文件下载.docx_第7页
第7页 / 共15页
教学计划编制Word文件下载.docx_第8页
第8页 / 共15页
教学计划编制Word文件下载.docx_第9页
第9页 / 共15页
教学计划编制Word文件下载.docx_第10页
第10页 / 共15页
教学计划编制Word文件下载.docx_第11页
第11页 / 共15页
教学计划编制Word文件下载.docx_第12页
第12页 / 共15页
教学计划编制Word文件下载.docx_第13页
第13页 / 共15页
教学计划编制Word文件下载.docx_第14页
第14页 / 共15页
教学计划编制Word文件下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

教学计划编制Word文件下载.docx

《教学计划编制Word文件下载.docx》由会员分享,可在线阅读,更多相关《教学计划编制Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。

教学计划编制Word文件下载.docx

计算机原理

C11

C7

编译原理

C5,C3

C8

操作系统

C3,C6

C9

高等数学

C10

线性代数

普通物理

C12

数值分析

C9,C10,C1

实现提示

可设学期总数不超过12,课程总数不超过100。

如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。

应建立内部课程序号与课程号之间的对应关系。

#include<

string.h>

stdio.h>

stdlib.h>

#definenull0

#defineMAXNODE64//最大课程个数

typedefstruct

{

charc[3];

}cid;

//课程号

typedefstructCourse

{

cidid[3];

charname[30];

//课程名

floatxf;

//学分

}Course;

////////////////////////////////////////////////课程

typedefstructPreCourse

{

intadjvex;

//课程在数组中的下标

structPreCourse*pre;

//指向下一先修的课程节点

}PreCourse;

/////////////////////////////////////////////////先修的课程节点

typedefstruct

Coursecourse;

//课程

PreCourse*firstnext;

//指向第一个先修的课程节点

}CourseNode;

////////////////////////////////////////////////////////////课程节点

CourseNodecourses[MAXNODE];

//邻接表

intxqs;

//学期总数

intnum;

//课程的数目

floatxfsx;

/////学分上限

}AlGraph;

///////////////////////////////////////////////////////////////课程图

intdata[MAXNODE];

//队中元素

intf,r;

//队头r队尾f

}queue;

intIsCricle=0;

//判断是否环1表示是0表示不是

intjxq;

//用于计算学期的

/////////////////////////////////////////////////////////////////////////

voidqueueinit(queue*q)///////////////队初始化

q->

f=q->

r=0;

}

voidqueuein(queue*q,intx)//入队

if((q->

r+1)%MAXNODE==q->

f)

printf("

队满\n"

);

exit(0);

}

r=(q->

r+1)%MAXNODE;

data[q->

r]=x;

intqueueout(queue*q)//出队

if(q->

f==q->

r)

队空\n"

f=(q->

f+1)%MAXNODE;

returnq->

f];

intqueueempty(queue*q)///////////////队判空1为空

return1;

elsereturn0;

voidcreatpre(AlGraph*CGraph)///////////////建立先修关系

system("

cls"

//用来清屏

intchoice;

fflush(stdin);

/////////////////////////////////////////////清空输入流

inti,j,n;

//////临时变量

PreCourse*p,*q;

//////临时变

printf("

\n建立先修关系:

\n"

\n请输入每一门课程号的编号:

"

for(i=0;

i<

CGraph->

num;

i++)

if(i%4==0)printf("

%d)"

i+1);

%s\t"

CGraph->

courses[i].course.id);

\n请根据以上的编号,输入每一门课程的先修课程(输入0表示没有或结束):

%s的先修课程:

scanf("

%d"

&

j);

n=0;

while(j)

{

while(j<

1||j>

num||j==i+1)

{

if(j==i+1)

printf("

先修课程号不能是本课程号"

else

输入的先修课程号不在该专业开设的课程序列中"

fflush(stdin);

printf("

重新输入:

scanf("

}

p=(PreCourse*)malloc(sizeof(PreCourse));

p->

adjvex=j-1;

pre=null;

if(n==0)

{

CGraph->

courses[i].firstnext=p;

q=CGraph->

courses[i].firstnext;

n++;

else

{

q->

pre=p;

q=p;

scanf("

}

1)重新建立先修关系2)确定\n"

请选择:

scanf("

choice);

if(choice==1)

creatpre(CGraph);

jxq=0;

AlGraphinput()//////////////////////////////////输入并建立课程图

AlGraphCGraph;

intxqzs=0,kczs=0;

////////////////学期总数:

xqzs专业共开设课程数:

kczs

inti,j;

floatxf,xfsx=0;

//////临时变量xf学分上限:

xfsx

教学计划编制\n\n"

输入参数:

1、学期总数:

xqzs);

CGraph.xqs=xqzs;

2、专业共开设课程数:

kczs);

CGraph.num=kczs;

///////////////////////////////////课程数

3、学分上限(每个学期的学分上限都一样):

%f"

xfsx);

CGraph.xfsx=xfsx;

4、每门课的课程号(固定占3位的字母数字串)、课程名、学分:

kczs;

j=0;

fflush(stdin);

课程号:

%s"

CGraph.courses[i].course.id);

课程名:

CGraph.courses[i].course.name);

学分:

xf);

while(xf>

xfsx||xf<

=0)

printf("

本课程学分大于学期学分上限或小于等于零,请重新输入学分:

fflush(stdin);

CGraph.courses[i].course.xf=xf;

CGraph.courses[i].firstnext=null;

creatpre(&

CGraph);

///////////////建立先修关系

returnCGraph;

voidoutput(AlGraphCGraph)///////////////输出先修关系

PreCourse*p;

\n\n"

课程编号\t课程名称\t\t先决条件\n"

CGraph.num;

%s\t\t%s\t\t"

CGraph.courses[i].course.id,CGraph.courses[i].course.name);

p=CGraph.courses[i].firstnext;

while(p)

n=p->

adjvex;

%s"

CGraph.courses[n].course.id);

p=p->

pre;

j++;

if(j==0)printf("

无"

voidfindoutdegree(AlGraph*CGraph,intoutdegree[])/////////找出度数,即找出每一门课程的先修课数

inti;

outdegree[i]=0;

p=CGraph->

outdegree[i]++;

voidjudgingcricle(AlGraph*CGraph,queue*q2)////////判断是否有环

intoutdegree[MAXNODE];

/////////出度

inti,m,j,pd=0;

floatxf=0;

queueq;

queueinit(&

q);

///////////////队初始化

findoutdegree(CGraph,outdegree);

/////////找出度

if(outdegree[i]==0&

&

(xf+CGraph->

courses[i].course.xf)<

=CGraph->

xfsx)/////////出度为零的,并且学分还没达到学分上限的入队,即没有先修课的课程入队

{queuein(&

q,i);

outdegree[i]--;

xf+=CGraph->

courses[i].course.xf;

m=0;

xf=0;

queuein(&

q,-1);

jxq++;

while

(1)

i=queueout(&

queuein(q2,i);

if(i!

=-1)

m++;

for(j=0;

j<

j++)

if(j!

=i)

if(outdegree[j]==0&

courses[j].course.xf)<

xfsx)/////////将之前因学分上限受制的出度为零的入队,即没有先修课的课程入队

{queuein(&

q,j);

outdegree[j]--;

courses[j].course.xf;

else{

p=CGraph->

courses[j].firstnext;

while(p)

{

if(p->

adjvex==i)

{

outdegree[j]--;

if(outdegree[j]==0&

xfsx)/////////出度为零的入队

{queuein(&

pd=1;

}

p=p->

}

}

else

{if(pd){pd=0;

}elsebreak;

if(jxq>

xqs){printf("

\n错误报告:

\n在%d学期内是无法修完这些课程\n"

xqs);

exit(0);

if(m<

num)

for(i=0;

if(outdegree[i]>

0)

存在循环,因此课程安排不了\n"

IsCricle=1;

voidlayout1(AlGraph*CGraph,queue*q)////////////////编排1/////

\n学生在各学期中的学习负担尽量均匀:

inti,j,xq=1,cxq=CGraph->

xqs-jxq,ck[20];

floatxf,m=CGraph->

num/CGraph->

xqs*1.0f;

//m是每学期要学的课程数

queueq1=*q;

////

while(!

queueempty(&

q1))

20;

i++)ck[i]=-1;

m+1;

j=queueout(&

q1);

if(j==-1)break;

ck[i]=j;

if(ck[0]!

\n第%d学期学:

xq++);

xf=0;

i=0;

do{

j=ck[i];

%s"

courses[j].course.id);

i++;

}while(ck[i]!

=-1);

获得学分是%.2f\n"

xf);

voidlayout2(AlGraph*CGraph,queue*q)////////////////编排2

\n课程尽可能地集中在前几个学期中:

inti,j,xq=1;

floatxf;

j=queueout(&

if(j!

{printf("

else{printf("

获得学分是%.2f\n第%d学期学:

xf,xq++);

while(xq<

无\t"

voidmain()

{

//用来存放已编排好的课程

//课程图

CGraph=input();

//输入并建立课程图

output(CGraph);

///////////////输出先修关系

judgingcricle(&

CGraph,&

////////判断是否有环

if(!

IsCricle)

请选择编排策略:

1.使学生在各学期中的学习负担尽量均匀;

2.使课程尽可能地集中在前几个学期中。

//scanf("

//fflush(stdin);

//if(choice==1)

layout1(&

////////////////编排1

//else

layout2(&

////////////////编排2

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

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2