1目录1课题需求描述..........................................21.1教学计划编制问题..................................21.2进制转换..........................................22总体功能与数据结构设计.................................32.1总体功能结构......................................32.2数据结构设计......................................43算法设计和程序设计....................................63.1教学计划编制问题..................................63.2进制转换问题......................................94调试与测试...........................................234.1教学计划编制问题调试结果.........................234.2进制转换问题调试结果.............................255设计总结.............................................276程序代码.............................................2921课题需求描述1.1教学计划编制问题大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。在这样的前提下设计一个教学计划编制程序。通过输入实际的课程及先后关系。结合每学期的学分及课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。1.2进制转换进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制,八进制和十六进制。十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制0~15),十六进制数运算规律逢十六进一。要求:(1)输入一个十进制数N,将它转换成R进制数输出,并可以进行你转换。(2)输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2=R=16)。(3)为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。32总体功能与数据结构设计1.教学计划编制问题根据问题描述及要求,可知设计中需要定义先修关系的AOV网图中的顶点及弧边的结构体,在运行结果中将图的信息显示出来,利用先修关系将课程排序,最后解决问题——输出每学期的课程。2.进制转换问题由于计算机只能识别二进制,所以当我们从键盘输入其他进制数的时候,计算机内部的系统会利用自带的程序代码自动转换成二进制,我们是学计算机的,所以我们需要弄懂这种机制转换的原理并且能计算出来。2.1总体功能结构2.1.1教学计划编制问题教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编制的基本依据和课程安排的具体形式。是稳定教学秩序、提高教学质量的重要保证。从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合.教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有很好的应用价值。使用C程序设计语言,研究开发教学计划编制系统Web应用系统。2.1.2进制转换问题1.十进制数与非十进制数之间的转换4(1)十进制数转换成非十进制数把一个十进制数转换成非十进制数(基数记作R)分成两步.整数部分转换时采用“除R取余法”;小数部分转换时采用“乘R取整法”。(2)非十进制数转换成十进制数非十进制数(基数记作R,第j个数位的位权记作Rj)转换成十进制数的方法:按权展开求其和。2.非十进制数之间的转换(1)二进制数与八进制数之间的转换①二进制数转换成八进制数的方法.以小数点分界,整数部分自右向左、小数部分自左向右,每三位一组,不足三位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的八进制数码。②八进制数转换成二进制数的方法:用八进制数码对应的三位二进制数代替八进制数码本身即可。(2)二进制数与十六进制数之间的转换①二进制数转换成十六进制数的方法:以小数点分界,整数部分自右向左、小数部分自左向右,每四位一组,不足四位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的十六进制数码。②十六进制数转换成二进制数的方法:用十六进制数码对应的四位二进制数代替十六进制数码本身即可。2.2数据结构设计2.2.1教学计划编制问题LocateVex():图的邻接表存储的基本操作CreateGraph():构造生成树Display():输出图的邻接矩阵FindInDegree():求顶点的入度InitStack():构造一个空栈5ClearStack():清空栈StackEmpty():判断是否为空栈Pop():出栈Push():入栈TopologicalSort():输出G顶点的拓扑排序结果2.2.2进制转换问题voidD_B():十进制转换为二进制voidD_O():十进制转换为八进制voidD_X():十进制转换为十六进制voidB_D():二进制转换为十进制voidB_O():二进制转换为八进制voidB_X():二进制转换为十六进制voidO_B():八进制转换为二进制voidO_D():八进制转换为十进制voidO_X():八进制转换为十六进制voidX_B():十六进制转换为二进制voidX_D():十六进制转换为十进制voidX_O():十六进制转换为八进制63算法设计和程序设计3.1教学计划编制问题3.1.1采用C语言定义相关的数据类型。其中包括字符常量,整型,字符型,字符串型,typedef定义的类型,结构体型,单链表节点类型,结构体数组。3.1.2主要函数的流程图1.LocateVex():图的邻接表存储的基本操作。由初始条件G存在,u和G中顶点有相同特征转而进行判断,若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。72.CreateGraph():构造生成图。采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图)。3.Display():输出图的邻接矩阵。采用循环设置输出图的邻接矩阵。4.FindInDegree():求顶点的入度。5.InitStack():构造一个空栈。6.ClearStack():清空栈。87.StackEmpty():判断栈是否为空。若栈S为空栈,则返回TRUE,否则返回FALSE。8.Pop():出栈。若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。99.Push():入栈。插入元素e为新的栈顶元素。10.TopologicalSort():输出G顶点的拓扑排序结果。有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK,否则返回ERROR。3.2进制转换问题主要流程图:进制转换菜单:101.voidD_B():十进制转换为二进制for(j=0;a!=0;j++){p[j]=a%2;a=a/2;}printf(\n转换后的数为:);for(k=j-1;k=0;k--){printf(%d,p[k]);}printf(\n);112.voidD_O():十进制转换为八进制for(j=0;a!=0;j++){p[j]=a%8;a=a/8;}printf(\n转换后的数为:);for(k=j-1;k=0;k--){printf(%d,p[k]);}printf(\n);3.voidD_X():十进制转换为十六进制for(j=0;a!=0;j++){p[j]=a%16;a=a/16;if(p[j]10)p[j]+=48;else{switch(p[j]){case10:p[j]='A';break;case11:p[j]='B';break;case12:p[j]='C';break;case13:p[j]='D';break;case14:p[j]='E';break;case15:p[j]='F';break;}}12十进制转换为任意进制:134.voidB_D():二进制转换为十进制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);elseprintf(\n转换后的数为:%d\n,result);5.voidO_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转换后的数为:%d\n,result);}14任意进制转换为十进制:156.voidB_O():二进制转换为八进制for(i=1;a!=0;i*=2){if(a%101){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%8;result=result/8;}if(s==1)printf(您的输入有误!请重新输入\n);else{printf(\n转换后的数为:);for(k=j-1;k=0;k--){printf(%d,p[k]);}printf(\n);}7.voidB_X():二进制转换为十六进制for(i=1;a!=0;i*=2){if(a%101){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%16;result=result/16;if(p[j]10){switch(p[j]){case10:p[j]='A';break;case11:p[j]='B';break;case12:p[j]='C';break;16case13:p[j]='D';break;case14:p[j]='E';break;case15:p[j]='F';break;}}elsep[j]+=48;}if(s==1)printf(您的输入有误!请重新输入\n);else{printf(\n转换后的数为:);for(k=j-1;k=0;k--){printf(%c,p[k]);}printf(\n);}8.voidO_B():八进制转换为二进制for(i=1;a!=0;i*=8){if(a%107){s=1;break;}else{result+=(a%10)*i;a=a/10;}}for(j=0;result!=0;j++){p[j]=result%2;result=result/2;}if(s==1)printf(您的输入有误!请重新输入\n);17else{printf(\n转换后的