资源描述
专业基础综合课程设计设计说明书进制转换的实现学生姓名学号班级成绩指导教师数学与计算机科学学院2012 年6 月29日数据结构课程设计评阅书题 目进制转换的实现学生姓名学号指导教师评语及成绩成绩: 教师签名: 年 月 日答辩教师评语及成绩成绩: 教师签名: 年 月 日教研室意见总成绩: 室主任签名: 年 月 日注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。课程设计任务书2011 2012 学年第 二 学期专业:计算机应用技术 学号: 姓名: 课程设计名称: 数据结构课程设计 设计题目: 进制转换的实现 完成期限:自 2012 年 6 月 18 日至 2012 年 6 月 29 日共 2 周设计依据、要求及主要内容(可另加附页):计算机中数据的存储形式是0,1代码,也就是以二进制的形式进行存储,运用c或vc+结合数据结构等基础知识,按以下要求实现各种进制的转换。任务要求:1)阐述设计思想,画出流程图;2)能完成用户输入的十进制数转换为二进制、八进制、十六进制及其他进制数,以及将其他任意进制数转换成十进制的功能;3)除十进制以为的其他进制之间的相互转换功能的实现;4)将用户的输入及要求的结果能对应打印输出;5)应用较好的界面设计,说明程序测试方法;6)按照格式要求完成课设说明书。设计要求:1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言,使程序中逻辑概念清楚;5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果;6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;7)编写课程设计报告;以上要求中前三个阶段的任务完成后,先将设计说明数的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日摘要: 本次课程设计设计了一个任意进制之间转换的软件程序系统,开发本系统,解决任意进制之间的相互转换,系统主要有以下几个模块:任意进制转换为十进制、十进制转换为任意进制以及两者组合实现任意进制间的相互转换。本软件程序系统在windows 2000/XP系统下,以Microsoft Visual C+ 6.0为运行软件环境,采用C/C+语言进行编写,操作简单明了,实际解决各进制数之间的转换。目录1 课题描述12 问题分析和任务定义23 逻辑设计34 详细设计75 程序调试与测试 10 5.1十进制转换为任意进制 105.2任意进制转化为十进制 115.3任意进制间的转换 12总结 18参考文献 191 课题描述在计算机内部,数据是以二进制表示的,而人们习惯上使用的是十进制数,所以计算机从我们这里接收到十进制数后,要经过翻译,把十进制数转换为二进制数才能进行处理,该系统能够根据用户的要求,用C语言来编写这个程序,实现二进制、八进制、十进制、十六进制之间的相互转化,以及任意进制间的相互转换。系统开发基于Windows2000/Xp平台,以Visual C+6.0等作为开发工具。2 问题分析和任务定义数制转换程序是要求任意两种数间的相互转化,本次课程设计以任意进制间转换为中心实现二进制、八进制、十进制、十六进制、十八进制之间的相互转化。其转换方式大致相同,从低进制数向高进制数转换进行乘数累加,反之则逐步求余,最终进行分布计算得到想要的结果。本次系统程序,主要有两大模块组成,即任意进制转换为十进制、十进制转换为任意进制,这两部分共同组成了对任意进制数的转换的实现,通过菜单选择,让用户实现自己想要的结果。最后打印输出结果。3 逻辑设计数值转换转换系统,包括八个子函数模块,其中菜单函数模块定义为整型,其余字符转换函数处理模块都根据函数所需定义数据类型。数制转换处理系统中用栈来储存处十进制以外的数,将一个指定进制的数,从低到高一位一位取出,并计算出每位的十进制值,然后乘以其数基的特定幂指数,得出这一位数的十进制值,将所有各位的十进制值相加得出这个数的十进制值,然后再将该十进制数转换为指定数制的数,此过程采用求余法进行,用这个十进制数作为被除数,用指定的数基作除数,连续求余,得出的余数依由个位到十位等的顺序组成新数,即得指定数制的数。逻辑设计如图3.1所示。 结束主菜单始开数函择选退出程序进制转换返回主菜单任意进制之间任意进制到十十到任意进制图3.1设计思想流程图31程序流程图(1)主函数main()流程图,如图3.2所示主菜单始开作操择选0操作1操作十到任意进制任意进制到十任意进制之间结束图3.2 main函数流程图(2)十进制转换为任意进制流程图,如图3.3所示开始int q,i=0,b,c=0,n=0;传的参数赋b,b0?i+对b求余,赋给qq=q+48将q值转换为十六进制补码压栈操作,调用入栈函数求商操作,将商赋给bi=ni0输出转换结果i-结束nnnyyy判断b是否为要转换的数字类型y重新输入n图 3.3为十进制到任意进制转换流程图(3)任意进制到十进制的转换,如图3.4所示开始int i=0,j=0,y,d,c=-1; int v=0,r=0,sum=0;i+,n+,q=b%m传的参数赋b,b0?输出转换结果i=nnyi-结束i0yy对b求余,赋给qq=q+48nn将q值转换为十六进制补码入栈操作,对栈顶元素操作图 3.4为任意进制到十进制转换流程图4 详细设计#include#include#include#include#include#include#include#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10typedef char Status; typedef structint *base; int *top;int stacksize; /当前已分配的存储空间,以元素为单元 SqStack;char s120;char s210;int InitStack(SqStack &S) /构造一个空栈 S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int);if(!S.base) /空栈的标志 return(ERROR); S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status clearstack(SqStack &S) /清空栈S.top=S.base;return OK; Status Push(SqStack &S,int e) /压栈(插入元素e为新的栈顶元素) if(S.top-S.base=S.stacksize)S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base)return(OVERFLOW); /存储分配失败S.top =S.base +S.stacksize ;S.stacksize+=STACKINCREMENT;S.top=S.base;S.top+;/先插入数据元素,再移动栈顶指针*S.top=e;return OK;char StackEmpty(SqStack *S) /判断栈是否为空if(S-top=S-base)return OK;elsereturn ERROR;int ANY_TEN(int n) /任意进制转化为十进制int i=0,j=0,y,d,c=-1; int v=0,r=0,sum=0;char t20; printf(请输入您要转化的数:); scanf(%s,&t); printf(n); fflush(stdin);while(tj!=0)j+; for(i=0;ti!=0;i+) if(int)(ti)=48&(int)(ti)=A&(int)(ti)=J); else printf(输入有误! 请输入数字: n); printf(请输入您要转化的数:); scanf(%s,&t); c+; y=j-i-1; if(ti0) i+; n+; q=b%m; if(q9) q= toupper(q+55); else q=q+48; Push(S,q); b=b/m;s1i=*S.top;printf(最终转换结果为:);for(i=n;i0;i-)printf(%c,s1i);int ANY_ANY(SqStack &S) /任意进制间的转换 int m,z,n,sum; printf(请输入源进制和目标进制(2,8,10,16):); scanf(%d,&n); scanf(%d,&m); printf(n); printf(将%d进制转换为%d进制,n,m);printf(n); printf(n);sum=ANY_TEN(n);InitStack(S);TEN_ANY( S, sum,m);return(OK); int menu_select()int c; do printf(n); printf(tt 2、8、10、16进制间的互相转换tnnn); printf(tt 1.进制转换 tnn); printf(tt 0.谢谢使用tnn); printf(tt 请输入你需要进行的操作1/0:nnn ); fflush(stdin); scanf(%d,&c); while(c1); return(c);void main() SqStack S; int n,m; float a; for(;) switch (menu_select() case 1: printf(ttt 进制转换nn); ANY_ANY(S); break; case 0: printf(ttt 谢谢使用!再见!:n); printf(ttt); exit(0); 5 程序调试与测试在vc+6.0运行界面如图5.1所示:数制转换函数调试结果截图 图5.1为数制转换程序运行界面5.1十进制转换为任意进制,结果如图5.25.5所示:(1)输入合法数据:图5.2为十进制到二进制的转换图5.3为十进制到八进制的转换图5.4为十进制到十六进制的转换(2)输入非法数据:图5.5 输入非法数据5.2任意进制转化为十进制,结果如图5.65.9所示:(1)输入合法数据:图5.6为二进制到十进制的转换图5.7为八进制到十进制的转换图5.8为十六进制到十进制的转换(2)输入非法数据:图5.9对小数不能正确转换5.3任意进制间的转换,结果如图5.105.13所示:(1)输入合法数据:图5.10为二进制到八进制的转换图5.11为八进制到十六进制的转换图5.12为十六进制到二进制的转换(2)输入非法数据:图 5.13 对非法数据不能正确判断5.4 程序运行结束,如图5.14所示:退出界面结果截图:图5.14为程序退出界面总结通过本次课程设计,提高了自己对于程序总体思路的把握,以及对程序的分析和理解。更能熟练的运用整型数组进行取整求余从而进行进制间的转换。能通过switch语句进行判断选择处理,使自己通过程序设计,真正的在实践中把课本所学的知识熟练的运用。所完成的数制转换器系统实现的二进制、八进制十六进制和十进制之间转换等功能,除此之外不能实现小数的转化问题、判断对输入数字的判断是符合要求和对输入不合法字符检验并提示的功能。希望以后可以实现上述两个问题,首先是改进程序,使其能实现小数的转化,和和判断对输入数字的判断是符合要求,对输入不合法字符检验并提示的功能。这次课程设计是我对c语言知识进行了系统的、有条理的复习,对许多知识点都加深了记忆。我了解到c语言的提高,通过编写复杂的程序,这样可以开阔思路,检验自己对各章节使用的灵活度,检验自己在学习中的漏洞。同时这次课程的制作,为我毕业设计的制作打下了坚定的基础。参考文献1严蔚敏 ,吴伟民 .数据结构(c语言版)M 北京: 清华大学出版社 20072罗建军,朱丹军,顾刚.C+程序设计教程(第2版)M 北京: 高等教育出版社 20073李虹,杨静丽.C语言程序设计 M 南京: 南京大学出版社 2010
展开阅读全文