教学计划清单编制问题

上传人:痛*** 文档编号:87010835 上传时间:2022-05-09 格式:DOC 页数:54 大小:2.40MB
收藏 版权申诉 举报 下载
教学计划清单编制问题_第1页
第1页 / 共54页
教学计划清单编制问题_第2页
第2页 / 共54页
教学计划清单编制问题_第3页
第3页 / 共54页
资源描述:

《教学计划清单编制问题》由会员分享,可在线阅读,更多相关《教学计划清单编制问题(54页珍藏版)》请在装配图网上搜索。

1、word目录1 课题需求描述31.1 教学计划编制问题31.2 进制转换32 总体功能与数据结构设计42.1 总体功能结构42.2 数据结构设计53 算法设计和程序设计73.1 教学计划编制问题73.2 进制转换问题104 调试与测试244.1 教学计划编制问题调试结果244.2 进制转换问题调试结果265 设计总结286 程序代码301 课题需求描述1.1 教学计划编制问题大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以

2、有任意多门,也可以没有。每门课恰好占一个学期。在这样的前提下设计一个教学计划编制程序。通过输入实际的课程与先后关系。结合每学期的学分与课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。1.2 进制转换进制数制是人们利用符号进展计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制,八进制和十六进制。十六进制数有两个根本特点:它由十六个字符09以与A,B,C,D,E,F组成它们分别表示十进制015,十六进制数运算规律逢十六进一。要求:(1) 输入一个十进制数N,将它转换成R进制数输出,并可以进展你转换。(2) 输入数据包含多个测试实例,每个测试实例包含两个整数N(

3、32位整数)和R2=R=0;k-) printf(%d,pk); printf(n);2. void D_O(): 十进制转换为八进制 for(j=0;a!=0;j+) pj=a%8;a=a/8; printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%d,pk); printf(n);3. void D_X(): 十进制转换为十六进制for(j=0;a!=0;j+) pj=a%16;a=a/16; if(pj1) s=1;break; else result+=(a%10)*i;a=a/10; if(s=1) printf(您的输入有误!请重新输入n); el

4、se printf(n转换后的数为:%dn,result);5. void O_D(): 八进制转换为十进制for(i=1;a!=0;i*=8) if(a%107) s=1;break; else result+=(a%10)*i;a=a/10; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:%dn,result); 任意进制转换为十进制:6. void B_O(): 二进制转换为八进制for(i=1;a!=0;i*=2) if(a%101)s=1;break; elseresult+=(a%10)*i;a=a/10; for(j=0;r

5、esult!=0;j+) pj=result%8;result=result/8; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%d,pk); printf(n); 7. void B_X(): 二进制转换为十六进制 for(i=1;a!=0;i*=2) if(a%101)s=1;break; elseresult+=(a%10)*i;a=a/10; for(j=0;result!=0;j+) pj=result%16;result=result/16; if (pj10) swi

6、tch(pj) case 10: pj=A;break; case 11: pj=B;break; case 12: pj=C;break; case 13: pj=D;break; case 14: pj=E;break; case 15: pj=F;break; else pj+=48; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%c,pk); printf(n); 8. void O_B(): 八进制转换为二进制 for(i=1;a!=0;i*=8) if(a%107) s

7、=1;break; else result+=(a%10)*i;a=a/10; for(j=0;result!=0;j+) pj=result%2;result=result/2; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%d,pk); printf(n); 9. void O_D(): 八进制转换为十进制for(i=1;a!=0;i*=8) if(a%107) s=1;break; else result+=(a%10)*i;a=a/10; if(s=1) printf(您的

8、输入有误!请重新输入n); else printf(n转换后的数为:%dn,result); 10.void X_D(): 十六进制转换为十进制for(i=0;ik;i+) if(ai=1) bi=ai-48; else switch(ai) case A: bi=10;break; case B: bi=11;break; case C: bi=12;break; case D: bi=13;break; case E: bi=14;break; case F: bi=15;break; case a: bi=10;break; case b: bi=11;break; case c: bi

9、=12;break; case d: bi=13;break; case e: bi=14;break; case f: bi=15;break; default: s=1; 11.void O_X(): 八进制转换为十六进制for(i=1;a!=0;i*=8) if(a%107)s=1;break; elseresult+=(a%10)*i;a=a/10; for(j=0;result!=0;j+) pj=result%16;result=result/16; if(pj10) pj+=48; else switch(pj) case 10: pj=A;break; case 11: pj=

10、B;break; case 12: pj=C;break; case 13: pj=D;break; case 14: pj=E;break; case 15: pj=F;break; 12.void X_B(): 十六进制转换为二进制 for(i=0;ik;i+) if(ai=1) bi=ai-48; else switch(ai) case A: bi=10;break; case B: bi=11;break; case C: bi=12;break; case D: bi=13;break; case E: bi=14;break; case F: bi=15;break; case

11、a: bi=10;break; case b: bi=11;break; case c: bi=12;break; case d: bi=13;break; case e: bi=14;break; case f: bi=15;break; default: s=1; 13.void X_D(): 十六进制转换为十进制for(i=0;ik;i+) if(ai=1) bi=ai-48; else switch(ai) case A: bi=10;break; case B: bi=11;break; case C: bi=12;break; case D: bi=13;break; case E

12、: bi=14;break; case F: bi=15;break; case a: bi=10;break; case b: bi=11;break; case c: bi=12;break; case d: bi=13;break; case e: bi=14;break; case f: bi=15;break; default: s=1; 14.void X_O(): 十六进制转换为八进制for(i=0;ik;i+) if(ai=1)bi=ai-48; else switch(ai) case A: bi=10;break; case B: bi=11;break; case C:

13、bi=12;break; case D: bi=13;break; case E: bi=14;break; case F: bi=15;break; case a: bi=10;break; case b: bi=11;break; case c: bi=12;break; case d: bi=13;break; case e: bi=14;break; case f: bi=15;break; default: s=1; 其他进制间的转换:4 调试与测试4.1 教学计划编制问题调试结果输入学期总数,输入学期学分的上限,输入教学计划的课程数,输入先修关系的边数,输入课程的代表值,输入课程的

14、学分值如图输入每条弧的弧尾和弧头如图:显示的课程计划如下:4.2 进制转换问题调试结果进入系统时的界面:二进制转换为八进制:十进制转换为十六进制:十六进制转换为十进制:5 设计总结我的收获虽然在高中我们已经学了C语言,大一我们已经学习了C+语言,但是,直到本期我们才开设了数据结构这一门课程。这门课程让我们对程序的原理有了系统的认识。对以往模糊的经验,起了总结提升的作用。在学习了这门课程后,我们进展了一个星期的课程设计,以实践我们的学习容。在这次课程设计中,我被分配到了教学计划课程编制问题,开始感觉很难,因为我从未编写过如此复杂的程序。在多方查找资料并参考类似程序后,我大体将程序的构架描绘好了。

15、一边对照着网上的资料,一边对程序进展修改补充,然后根据拟好的大纲进展编制。期间,我与其它同学进展了讨论和探究,对程序的细节问题和应用方面进展了探索,并解决了主要的问题,于是便着手写具体的程序。由于教师要求我们编写600多行的代码,但是教学计划课程编制问题的代码不足,所以我又选择了一个课题进制转换问题,我会选择这个课题是因为我觉得作为学计算机的我,应该要能更好的了解关于计算机方面的知识。这次实验,我进展了大量的资料查阅,对所学知识进展复习。通过这些努力,我对算法有了更深入的理解,对编程的步骤,有了具体的体会。通过和同学的广泛交流,我体会到了合作的必要性与合作的优势。更重要的是,这个课题完全脱胎于

16、实际问题,让我对计算机行业,充满了信心和自豪。以往我们学的计算机知识一般停留在理论上,这让我们不太理解计算机的应用和前景,而较少注重我们对算法的实践锻炼。而这一次的实习既需要我们去联系理论,又需要我们去实践方法,很多东西看上去都学过,但是和实际联系才知道变通的困难。纸上得来终觉浅,这是我这次实习的最大收获。这次的实验让我们知道该如何跨过实际和理论之间的鸿沟。存在的问题由于程序十分的复杂,遇到了很多常见的语法错误,与逻辑错误。这需要我们不断的调试分析。符号的格式之类,指针的用法,判断输入输出的条件都是十分容易出错的地方。在逐条排除,程序终于得以完成。这让我明白了,解决问题,要细心认真,集思广益,

17、这样才能把问题解决。虽然程序变出来了,但是我大量借鉴了别人的程序,中间有很多的程序段都是一知半解,虽然查阅了资料,但是毕竟不是自己思考出来的程序,又无法当面询问写出编程的人,所以对局部程序还存在问题,我会继续查询资料将目前不懂的容弄清楚。参考资料:数据结构C+语言描述 吉根林 波主编 C+语言教材6 程序代码教学计划编制问题:#include#include#include / malloc()等#include / INT_MAX等#include / EOF(=Z或F6),NULL#include / atoi()52#include / eof()#include / floor(),c

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

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

20、ypedef structVertexType data; /* 顶点信息*/Arode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针*/ VNode,AdjListMAX_VERTEX_NUM; /* 头结点*/typedef structAdjList vertices,verticestwo;int vexnum,arum; /* 图的当前顶点数和弧数*/int kind; /* 图的种类标志*/ALGraph;/* 图的邻接表存储的根本操作*/int LocateVex(ALGraph G,VertexType u) /* 初始条件: 图G存在,u和G

21、中顶点有一样特征*/* 操作结果: 假如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;Arode *p;printf(请输入教学计划的课程数: );scanf(%d,&(*G).vexnum);printf(请输入拓扑排序所形成的课程

22、先修关系的边数: );scanf(%d,&(*G).arum);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,MAX_NAME); for(i=0;i(*G).vexnum;+i) /* 构造顶点向量*/scanf(%s,(*G).verticestwoi.data);p

23、rintf(请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):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;Arode *p;switch(G.kind)case DG: printf(有向图n);printf(%d个顶点:n,G.vexnum);for(i=0;iG.vexnum;+i)printf(%s

24、,G.verticesi.data);printf(n%d条弧(边):n,G.arum);for(i=0;iadjvex.data);p=p-nextarc;printf(n);void FindInDegree(ALGraph G,int indegree) /* 求顶点的入度,算法调用*/int i;Arode *p;for(i=0;iG.vexnum;i+)indegreei=0; /* 赋初值*/for(i=0;iadjvex+;p=p-nextarc;typedef int SElemType; /* 栈类型*/*栈的顺序存储表示*/#define STACK_INIT_SIZE 1

25、0 /* 存储空间初始分配量*/#define STACKINCREMENT 2 /* 存储空间分配增量*/typedef struct SqStackSElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */ SElemType *top; /* 栈顶指针*/int stacksize; /* 当前已分配的存储空间,以元素为单位*/SqStack; /* 顺序栈*/* 顺序栈的根本操作*/Status InitStack(SqStack *S) /* 构造一个空栈S */(*S).base=(SElemType *)malloc(STACK_INIT_SIZ

26、E*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;Status StackEmpty(SqStack S) /* 假如栈S为空栈,如此返回TRUE,否如此返回FALSE */if(S.top=S.base)return TRUE;elsereturn FALSE;Status Pop(SqStack *S,S

27、ElemType *e) /* 假如栈不空,如此删除S的栈顶元素,用e返回其值,并返回OK;否如此返回ERROR */if(*S).top=(*S).base)return ERROR;*e=*-(*S).top;return OK;Status Push(SqStack *S,SElemType e) /* 插入元素e为新的栈顶元素*/if(*S).top-(*S).base=(*S).stacksize) /* 栈满,追加存储空间*/(*S).base=(SElemType*)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(SE

28、lemType);if(!(*S).base)exit(OVERFLOW); /* 存储分配失败*/(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;*(*S).top)+=e;return OK;typedef int pathoneMAXCLASS;typedef int pathtwoMAXCLASS;Status TopologicalSort(ALGraph G) /* 有向图G采用邻接表存储结构。假如G无回路,如此输出G的顶点的一个拓扑序列并返回OK, */* 否如此返回ERROR。*/int i,k,

29、j=0,count,indegreeMAX_VERTEX_NUM;bool has=false;SqStack S;pathone a;pathtwo b;Arode *p;FindInDegree(G,indegree); /* 对各顶点求入度indegree0.vernum-1 */ InitStack(&S); /* 初始化栈*/for(i=0;iG.vexnum;+i) /* 建零入度顶点栈S */if(!indegreei) Push(&S,i);/cout*G.verticesi.datanextarc) /* 对i号顶点的每个邻接点的入度减*/k=p-adjvex;if(!(-i

30、ndegreek) /* 假如入度减为,如此入栈*/Push(&S,k);/cout*G.verticesi.dataendl;if(countG.vexnum)printf(此有向图有回路n);return ERROR;elseprintf(为一个拓扑序列。n);has=true;FindInDegree(G,indegree); /* 对各顶点求入度indegree0.vernum-1 */ ClearStack(&S);cout=课程计划如下=endl;int =1; /学期数int xxf;while( =xqzs)int result20;int rtop=0;int nn=0;/i

31、nt 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第 个学期的课程为:endl; for(nn=0;nnrtop;nn+)cout课程G.verticesresultnn.dataendl; +;return OK;void mai

32、n() ALGraph f;printf(以下为教学计划编制问题的求解过程:n);printf(请输入学期总数:);scanf(%d,&xqzs);printf(请输入学期的学分上限:);scanf(%d,&xfsx);CreateGraph(&f);Display(f);TopologicalSort(f);进制转换问题:#include#include#includevoid D_B(int);void D_O(int);void D_X(int);void B_D(int);void B_O(int);void B_X(int);void O_B(int);void O_D(int);v

33、oid O_X(int);void X_B(char r,int k);void X_D(char r,int k);void X_O(char r,int k);void main() int i,j,k=0; int q; char r10; printf(+=+n); printf(| 欢 迎 使 用 进 制 转 换 程 序 |n); printf(+=+n); printf( 本 版 本 只 做 正 整 数 的 进 制 转 换 ! ); do q=0; /fflush(stdin); printf(n请选择需要被转换的进制:n1、二进制n2、八进制n3、十进制n4、十六进制n0、退出n

34、); printf(请输入04:); scanf(%d,&i); switch (i) case 1: printf(n请选择转换后的进制:n1、二进制n2、八进制n3、十进制n4、十六进制n0、退出n); printf(请输入04:); scanf(%d,&j); switch(j) case 1: printf(n同进制之间不用转化!n); q=1;break; case 2: printf(n请输入您想要转化的数:); scanf(%d,&k); B_O(k);q=1; break; case 3: printf(n请输入您想要转化的数:); scanf(%d,&k);B_D(k);q=

35、1;break; case 4: printf(n请输入您想要转化的数:); scanf(%d,&k);B_X(k);q=1;break; case 0: printf(使用!); break; case 2: printf(n请选择转换后的进制:n1、二进制n2、八进制n3、十进制n4、十六进制n0、退出n); printf(请输入04:); scanf(%d,&j); switch(j) case 2: printf(n同进制之间不用转化!n); q=1;break; case 1: printf(n请输入您想要转化的数:); scanf(%d,&k);O_B(k);q=1;break;

36、case 3: printf(n请输入您想要转化的数:); scanf(%d,&k);O_D(k);q=1;break; case 4: printf(n请输入您想要转化的数:); scanf(%d,&k);O_X(k);q=1;break; case 0: printf(使用!); break; case 3: printf(n请选择转换后的进制:n1、二进制n2、八进制n3、十进制n4、十六进制n0、退出n); printf(请输入04:); scanf(%d,&j); switch(j) case 3: printf(n同进制之间不用转化!n); q=1;break; case 1: p

37、rintf(n请输入您想要转化的数:); scanf(%d,&k);D_B(k);q=1;break; case 2: printf(n请输入您想要转化的数:); scanf(%d,&k);D_O(k);q=1;break; case 4: printf(n请输入您想要转化的数:); scanf(%d,&k);D_X(k);q=1;break; case 0: printf(使用!); break; case 4: printf(n请选择转换后的进制:n1、二进制n2、八进制n3、十进制n4、十六进制n0、退出n); printf(请输入04:); scanf(%d,&j); switch(j

38、) case 4: printf(n同进制之间不用转化!n); q=1;break; case 1: printf(n请输入您想要转化的数:); fflush(stdin);gets(r);for(k=0;k+) if(rk=0) break; X_B(r,k);q=1;break; case 2: printf(n请输入您想要转化的数:); fflush(stdin); gets(r); for(k=0;k+) if(rk=0)break; X_O(r,k);q=1;break; case 3: printf(n请输入您想要转化的数:); fflush(stdin);gets(r); for

39、(k=0;k+) if(rk=0)break; X_D(r,k);q=1;break; case 0: printf(使用!); break; case 0: printf(n使用!n); while(q=1);void B_D(int a)/以下为: 二进制转换为十进制,八进制,十六进制. int i,s=0; int result=0; for(i=1;a!=0;i*=2) if(a%101) s=1;break; else result+=(a%10)*i;a=a/10; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:%dn,res

40、ult); void B_O(int a) int i,j,k,s=0; int p30; int result=0; for(i=1;a!=0;i*=2) if(a%101)s=1;break; elseresult+=(a%10)*i;a=a/10; for(j=0;result!=0;j+) pj=result%8;result=result/8; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%d,pk); printf(n); void B_X(int a) int i,j

41、,k,s=0; char p30; int result=0; for(i=1;a!=0;i*=2) if(a%101)s=1;break; elseresult+=(a%10)*i;a=a/10; for(j=0;result!=0;j+) pj=result%16;result=result/16; if (pj10) switch(pj) case 10: pj=A;break; case 11: pj=B;break; case 12: pj=C;break; case 13: pj=D;break; case 14: pj=E;break; case 15: pj=F;break; else pj+=48; if(s=1) printf(您的输入有误!请重新输入n); else printf(n转换后的数为:); for(k=j-1;k=0;k-) printf(%c,pk); printf(n); void O_B(int a)/以下为: 八进制转换为二进制,十进制,十六进制. int i,j,k,s=0; int result=0; int p30;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!