教學計劃編制_第1頁
教學計劃編制_第2頁
教學計劃編制_第3頁
教學計劃編制_第4頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、教學計劃編制問題問題描述:大學的每個專業(yè)都要制定教學計劃。假設任何專業(yè)都有固定的學習年限,每學年含兩學期,每學期的時間長度和學分上限值均相等, 每個專業(yè)開設的課程都是確定的, 而且課程在開設時間的安排必須滿足先修關系。每門課程有哪些先修課程是確定的,可以有任意多門,也可以沒有。每門課恰好占一個學期。試在這樣的前提下設計一個教學計劃編制程序?;疽螅海?)輸入參數(shù)包括:學期總數(shù),一學期的學分上限,每門課的課程號 (固定占 3 位的字母數(shù)字串 )、學分和直接先修課的課程號。( 2)允許用戶指定下列兩種編排策略之一:一是使學生在各學期中的學習負擔盡量均勻;二是使課程盡可能地集中在前幾個學期中。(

2、3)若根據(jù)給定的條件問題無解,則報告適當?shù)男畔?;否則將教學計劃輸出到用戶指定的文件中。計劃的表格格式自行設計。測試數(shù)據(jù):學期總數(shù): 6;學分上限: 10;該專業(yè)共開設 12 門課,課程號從 C01 到 C12,學分順序為2,3,4,3,2,3,4,4,7,5,2,3。先修關系如下:課程編號課程名稱先決條件C1程序設計基礎無C2離散數(shù)學C1C3數(shù)據(jù)結構C1,C2C4匯編語言C1C5語言的設計和分C3,C4析C6計算機原理C11C7編譯原理C5,C3C8操作系統(tǒng)C3,C6C9高等數(shù)學無C10線性代數(shù)C9C11普通物理C9C12數(shù)值分析C9,C10,C1實現(xiàn)提示可設學期總數(shù)不超過 12,課程總數(shù)不超

3、過 100。如果輸入的先修課程號不在該專業(yè)開設的課程序列中,則作為錯誤處理。應建立內部課程序號與課程號之間的對應關系。#include#include#include#define null 0#define MAXNODE 64 /最大課程個數(shù)typedef structchar c3;cid; /課程號typedef struct Coursecid id3; / 課程號char name30; / 課程名floatxf; / 學分Course; /課程typedef struct PreCourseint adjvex; / 課程在數(shù)組中的下標struct PreCourse *pre;

4、 / 指向下一先修的課程節(jié)點 PreCourse;/ 先修的課程節(jié)點typedef structCourse course;/課程PreCourse *firstnext; / 指向第一個先修的課程節(jié)點CourseNode;/課程節(jié)點typedef structCourseNode coursesMAXNODE; /鄰接表int xqs;/ 學期總數(shù)int num; / 課程的數(shù)目float xfsx;/ 學分上限AlGraph;/課程圖typedef structint dataMAXNODE;/隊中元素int f,r;/ 隊頭 r隊尾 fqueue;int IsCricle=0;/判斷是否

5、環(huán)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、根據(jù)以上的編號,輸入每一門課程的先修課程(輸入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( 輸入的先修課程號不在該專業(yè)開設的課程序列中);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( 輸入參數(shù) :n);printf(1 、學期總數(shù) :);scanf(%d,&xqzs);CGraph.xqs=xqzs;學期總數(shù) :xqzsxf學分上限專業(yè)共開設課程數(shù) :xfsx:kczsprintf(2 、專業(yè)共開設課程數(shù):);scanf(%d,&kczs);CGraph.num=kczs;/課程數(shù)printf(3 、學分上限 (每個學期的學分上限都一樣):);scanf(%f,&xfsx);CGraph.xfsx=xfsx;printf(4 、每門課的課程號(固定占 3 位的字母數(shù)字串)、課程名、學分: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)/ 找出度數(shù),即找出每一門課程的先修課數(shù)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)/判斷是否有環(huán)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( 存在循環(huán),因此課程安排不了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是每學期要學的課程數(shù)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論