您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数据结构课程设计-进制的转换
数据结构课程设计设计说明书进制转换的实现学生姓名学号班级成绩指导教师数学与计算机科学学院年月日课程设计任务书2013—2014学年第一学期课程设计名称:数据结构课程设计课程设计题目:进制转换的实现完成期限:自年月日至年月日共周设计内容:计算机中数据的存储形式是0,1代码,也就是以二进制的形式进行存储.运用C或VC++结合数据结构等基础知识,按以下要求编程实现各种进制的转换。任务要求:1)阐述设计思想,画出流程图;2)能完成用户输入的十进制数转换为二进制、八进制、十六进制及其他进制数,以及将其他任意的进制数(如12进制)转换为十进制的功能,尤其注意不同进制数的表示符号;3)除十进制以外的其他进制间的相互转换功能的实现;4)将用户的输入及要求的结果能对应打印输出;5)应有较好的界面设计,说明程序测试方法;6)按照格式要求完成课程设计说明书。设计要求:1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;5)程序调试与测试:能够熟练掌握调试工具的各种功能,设计测试数据确保程序正确。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;7)编写课程设计报告;以上要求中前三个阶段的任务完成后,先将设计说明书的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。指导教师(签字):教研室负责人:批准日期:年月日课程设计评阅评语:指导教师签名:年月日摘要编写一个C语言程序,该程序可实现六十进制以内的任意进制(二进制,八进制,十进制,十二进制,二十四进制等)之间的转换。本程序采用VC++作为软件开发环境,采用栈的存储结构实现了进制的转换。操作简单,界面清晰,易于为用户所接受。关键词:C语言程序;进制转换;栈目录1课题描述..................................................................12问题分析和任务定义........................................................23逻辑设计..................................................................34详细设计..................................................................45程序编码..................................................................56程序调试与测试............................................................97结果分析.................................................................158总结.....................................................................16参考文献...................................................................1711课题描述数制有很多种,在计算机中用到的数制有:十进制,二进制、八进制、十六进制等。N进制数有两个基本特点:由个字符0~9以及若干字母组成(二十四进制由0-9,A-M组成,表示0-23;六十进制由0-9,A-Z,a-x组成,表示0-59),N进制数运算规律是逢N进一,例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。更大一些的数制则扩展十六进制未用的其他大写字母及小写字母。顺序栈是顺序存储结构的栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。同时附设栈顶指针top和栈基指针base,来方便栈内数据元素的存取和栈的扩充。22问题分析和任务定义2.1问题分析编写进制转换及其逆转换,其算法过程恰好是结果的逆序,因此建立一个顺序栈将计算过程中得到的数位顺序进栈,则按出栈顺序就会输出对应的转换结果。逆转换程序借助字符数组按顺序将每个数位转换成十进制数后求和,得到逆转换结果。例如:11转换成二进制数11%2=1;11/2=5;1入栈;5%2=1;5/2=2;1入栈;2%2=0;2/2=0;0入栈;被除数不为0;按顺序出栈,得到结果为110;2.2任务定义1)画出流程图;2)任意建立一个容量为100个栈元素的空栈;3)将N进制数与要转进制先求余,将余数顺序入栈;4)阐明测试方法,写出完整的运行结果;33逻辑设计3.1数据类型定义typedefstruct{int*base;int*top;intstacksize;}SqStack;3.2算法流程图(1)进制转换的主流程图如图3.1所示。开始输入待转换的数(整型)该数是否为整型该数是否为十进制数输入错误提示调用D2M()函数调用M2D()函数调用D2M()函数输出转换完成的数结束是是否否输入源进制输入目的进制图3.1进制转换主流程图(2)十进制转换为任意进制D2M()流程图,如图3.2所示。4开始inta,b;(a为源进制数,b为源进制)a是否为真r=a%b;入栈:Push(S,r)出栈:Pop(S,e)e为栈顶元素判断栈是否为空Printf(“%c”,e);e=65Printf(“%d”,e);结束否是否是否是图3.2函数D2M()流程图(3)任意进制转换为十进制M2D()流程图,如图3.3所示。开始charc[i];表示进制数用数组接收inty;表示目的十进制数输入源进制位数n输入源进制数i=nScanf(“%s”,c[i]);i++;是c[i]==’.’输入错误提示是65=c[i]=90否入栈:Push(S,c[i]-55);是97=c[i]=120入栈:Push(S,c[i]-61);否是否入栈:Push(S,c[i]-48);判断栈是否为空否出栈:Pop(S,e);e为栈顶元素;y+=(int)pow(m,i)*e;i++;否结束是图3.3函数D2M()流程图54详细设计(1)SqStack定义栈,base为栈底指针,top为栈顶指针,stacksize为栈容量;(2)intInitStack(SqStack&S),intGetTop(SqStackS,int&e),intPush(SqStack&S,inte),intPush(SqStack&S,inte),intPush(SqStack&S,inte),intDestroyStack(SqStack&S),六大模块分别表示构造一个空栈、用e表示栈顶元素,插入元素,删除栈顶元素,判断栈是否为空,及销毁栈。(3)D2M(inta,intb)的功能是将十进制数转换成M进制的函数。该算法思路为:例如:16转换成二进制数16/2=8;16%2=0;0入栈;8/2=4;8%2=0;0入栈;4/2=2;4%2=0;0入栈;2/2=1;2%2=0;0入栈;1/2=0;1%2=1;1入栈;被除数不为0;0,1,1依次出栈;转换结果为110;(4)2D()的功能是M进制转换为十进制的函数。该算法思路为:例如:二进制数110转换成十进制数0*2^0=0;1*2^1=2;1*2^2=4;转换结果为:0+2+4=6;(5)voidmain()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制的转换。65程序编码#includestdio.h#includemalloc.h#includestdlib.h#includemath.h#defineSTACK_INIT_SIZE100//存储空间初始分配量#defineSTACKINCREMENT10//存储空间分配增量inte,m,s,t;//e为临时用的的int型变量floatx;//x为要转换的十进制数intr,y,i,n;typedefstruct{int*base;//栈底int*top;//栈顶intstacksize;//栈容量}SqStack;intInitStack(SqStack&S){//构造一个空栈S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));if(!S.base)exit(0);//存储空间失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return0;}intGetTop(SqStackS,int&e){//若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if(S.top==S.base)return1;e=*(S.top-1);return0;}intPush(SqStack&S,inte){//插入元素e为新的栈顶元素if(S.top-S.base=S.stacksize){//栈满,追加存储空间S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));if(!S.base)return1;//存储分配失败S.top=S.base+S.stacksize;7S.stacksize+=STACKINCREMENT;}*S.top++=e;return0;}intPop(SqStack&S,int&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1if(S.top==S.base)return1;e=*--S.top;return0;}intStackEmpty(SqStackS){//若栈空,则返回1,否则返回0if(S.top==S.base)return1;return0;}intDestroyStack(SqStack&S){//销毁栈S,栈S不再存在free(S.base);S.top=NULL;//防止程序后面不小心使用了它S.base=S.top;return0;}SqStackS;//定义栈SD2M(inta,intb)//十进制转换成其他进制的函数D2M(){while(a){r=a%b;if(r9)r=r+55;Push(S,r);//压入栈a/=b;//转换成M进制}printf(该数转换成%d进制的结果:\n,b);8printf(************************************************************************\n);printf(二进制:0和1**八进制:0-7**十进制:0-9**十二进制:0-9,A-B\n);printf(十六进制:0-9,A-F**二十四进制:0-9,A-M**六十进制:0-9,A-Z,a-x\n);printf(***
本文标题:数据结构课程设计-进制的转换
链接地址:https://www.777doc.com/doc-5924006 .html