资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据结构课程设计设计说明书进制转换的实现学生姓名JUGG学号¥#班级Dota all star成绩优秀指导教师Puckdota科学与技术天灾元年 3 月 14 日数据结构课程设计评阅书题 目进制转换的实现学生姓名JUGG学号#%¥#¥%#指导教师评语及成绩成绩: 教师签名: 年 月 日答辩教师评语及成绩成绩: 教师签名: 年 月 日教研室意见总成绩: 室主任签名: 年 月 日Dota all star课程设计任务书天灾元年 近卫戊年 第 二 学期专业: ganker 学号: sadofaiofo 姓名: 课程设计名称: 数据结构课程设计 设计题目: 进制转换的实现 完成期限:自 天灾元年年 3 月 1 日至 近卫戊年 年 3 月 14 日共 2 周设计依据、要求及主要内容(可另加附页):进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。十六进制数有两个基本特点:它由十六个字符09以及A,B,C,D,E,F组成(它们分别表示十进制数015),十六进制数运算规律是逢十六进一,例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。要求: (1)输入一个十进制数N,将它转换成R进制数输出,并可以进行逆转换。(2)输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2=R=16, R10)。(3)为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。(4)界面友好。指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日摘 要由于数制计算和不同数制之间转换的需要,设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。本软件采用C语言编写以VC+作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。操作简单,界面清晰,易于为用户所接受。关键词:进制转换;顺序栈;逆转换I目 录1 课题描述12 问题分析和任务定义24 详细设计75 程序编码86 程序调试与测试137 结果分析158 总结16参考文献1711 课题描述数制有很多种,在计算机中常用的数制有:十进制,二进制、八进制和十六进制。十六进制数有两个基本特点:它由十六个字符09以及A,B,C,D,E,F组成(它们分别表示十进制数015),十六进制数运算规律是逢十六进一,例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H。更大一些的数制则扩展十六进制未用的其他大写字母。顺序栈是顺序存储结构的栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。同时附设栈顶指针top和栈基指针base,来方便栈内数据元素的存取和栈的扩充。 2 问题分析和任务定义问题分析:编写进制转换及其逆转,其算法过程恰好是结果的逆序,因此建立一个顺序栈将计算过程中得到的数位顺序进栈,则按出栈顺序就会输出对应的转换结果。逆转程序借助字符数组按顺序将每个数位转换成十进制数后求和,得到逆转结果例如:11转换成二进制数 11%2=1; 11/2=5;1入栈; 5%2=1; 5/2=2;1入栈; 2%2=0; 2/2=0;0入栈; 被除数不为0;按顺序出栈,得到结果为110;任务定义:1)画出流程图;2)任意建立一个容量为20个栈元素的空栈;3)将十进制数与要转进制先求余,将余数顺序入栈;4)阐明测试方法,写出完整的运行结果;5)撰写课程设计说明书。3 逻辑设计(1)ADT Stack数据对象:D=ai | ai ElemSet,i=1,2,n, n0 数据关系:R1= | ai -1, aiD,i=2,,n基本操作: Inistack(&S)操作结果:构造一个空栈S。 stackEmpty(&S)初始条件:栈S已存在。操作结果:判断栈S是否为空,若为空,则返回1;否则返回0. push(&S,x) 初始条件:栈S已存在。操作结果:插入元素x为新的栈顶元素。 Pop(&S。&e) 初始条件:栈S已存在且非空。操作结果:删除S的栈顶元素,并用y返回其值。ADT Stack(2)主函数流程图如图3.2所示图3.1 创建主函数流程图(3)十进制转换其他进制数流程图如图3.3所示图3.2十进制转换其他进制数算法流程图(4)其他进制数转换十进制数流程图如图3.4所示图3.3倒序输出算法流程图4 详细设计本程序主要有三个算法:一、十进制整数转换其他进制数,其主要思路为:例如:11转换成二进制数 11%2=1; 11/2=5; 5%2=1; 5/2=2; 2%2=0; 2/2=0; 被除数不为0;转换结果为110;二、十进制小数转换其他进制数,其主要思路为:例如:0.125转换成二进制小数 0.125*2=0.25;取结果的整数为0;0.25*2=0.5;取结果的整数为0;0.5*2=1.0;取结果的整数为1;小数部分不为0;转换结果为0.001;三、其他数制转换十进制数,其主要思路为:例如:二进制数10.1转换成十进制数1*=2;0*=1;1*=0.5;逆转数字存储在数组中,最后的结束符0,为标志。转换结果为2+1+0.5=3.5;5 程序编码#include#include#include#define STACK_INIT_SIZE 20#define STACKINCREMENT 10typedef int SElemType;typedef structSElemType *base,*top;int stacksize;SqStack;int InitStack(SqStack &S)S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base)exit(0);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 1;int Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType);if(!S.base)exit(0);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return 1;int Pop(SqStack &S,SElemType &e)if(S.top=S.base)return 0;e=*-S.top;return 1;int StackEmty(SqStack S)if(S.top=S.base)return 1;else return 0;void XSZZ(double n,int T)int i=0;double a;if(n=0.0)printf(00000);while(n!=0.0)a=T*n;n=a-(int)a;if(a=10)printf(%c,(int)a-10+A);i+;else printf(%d,(int)a0?(int)a:0);i+; if(i=5)break;int NZ()int i=0,j,T,k=0;double sum=0; char a20,X;getchar();printf(输入转换数);while(ai=getchar()!=n)if(ai=0)|(ai=A)|ai=.);else break;if(ai=.)k=i;i+;k=k?k:i;if(ai!=n) while(getchar()!=n);printf(输入有误);return 0; ai=0; ak=0; printf(输入转换数的进制); scanf(%d%c,&T,&X); if(!(T1&T36)|X!=n) while(getchar()!=n); printf(输入有误);printf(sdf %c,X); return 0; for(j=0;j=T)&(aj=9)|(
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号