数据结构课程设计数制转换_第1页
数据结构课程设计数制转换_第2页
数据结构课程设计数制转换_第3页
数据结构课程设计数制转换_第4页
数据结构课程设计数制转换_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构课程设计1、设计目的1.1、问题描述任意给左一个M进制的数X,转换为苴它任意进制的数据。1.2、基本要求1、对给字一个M进制的数据X,求岀此数x的10进制值(用MD表示);2、实现对x向任意的一个非M进制的数的转换;3、至少用两种方法实现上述要求(用栈解决,用数组解决,其它方法解决)。2、设计正文2.1、系统分析2.1.1、用数组实现该问题:DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换 为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对 其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整

2、,并将所 得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD() 函数则是实现英他进制M转换为十进制,并将英转换为非M进制的数。M进制转十进制则 是从该M进制数的最后一位开始算,依次列为第0、1、2n位并分别乘以M的0、1、 2n次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数将英转换为非 M进制的数。2.1.2用栈实现该问题:同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。 只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。2.2、模块划分221、用数组实现该问题:i.j,y,n,s

3、,m.r.rcmindcr,x是左义的全局变量,初始值都为0 ; DtoM(int g,int h)是实现十进制数转换为M进制数的函数: MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调 用D2M(int g,int h)实现向非M进制数的转换:HloD(imf)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int h)实 现向非十六进制数的转换:void main()是主函数,功能是给出测试的数拯,并在特定条件下调用D2M()函数和M2D() 函数。222、用栈实现该问题:SqStack定义栈,说明base为栈底指针,top为栈顶指

4、针,stacksize为栈容呈:;(2) int InitStack(SqStack &S)到 int DestroyStack(SqStack &S)六大模块分别表示构造一个空 栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈; SqStack S是指定义栈S;DtoM(int b)的功能是将十进制数转换成M进制的函数; MtoD()的功能是M进制转换为十进制的函数:voidmain()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情 形下调用DtoM()函数和MtoD()函数,而且实现M进制数向任意非M进制数的转换。2.3流程图2.3.1数组流

5、程图232、栈流程图2.4、源程序源程序有两个,shuzu.cpp是用数组实现该问题的程序,而Stack.cpp是用栈实现该问题 的程序。文件 zhyshuzu.cpp#include#include#include#include#define N 1000/以下为DtoM(int g,int h)是实现十进制数转换为M进制数的函数,DtoM(int h)int cN;int i=0;int j;int reminder;reminder=g%h;g=g/li;if(remindcr9)ci=reminder+55;i+;elseci=reminder; i+;if(g0)Dto

6、M(g.h);for(j=i-l;j=0;j-)if(cj=65)printf(”c,cj);elseprintf(”d,cj);以下Mk)D()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中 调用D2M(int gjnt h)实现向非M进制数的转换MtoD(int e)/二进制和八进制数转换为十进制数,并这转换为其他进制数int n,i,y=OJ,s;int aN;printf(请输入d进制位数:,e);scanf(,%d,&n);jQprimf(”请输入d进制的每位并使每位用空格隔开:=);for(i=n-l;i=0;i-)scanf(H%d&ai);for(i=0

7、;in;i+)y+=(int)pow(ej)*ai;强制类型转换,以免造成数据丢失j+;prin叱所得的10进制的结果:d y);printf(n需要转换的进制M:);scanf(” d”,&s);printf(请输出转换成強d进制的结果:,s);return 0;以下为HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int gjnt h) 实现向非十六进制数的转换HtoD(int f)十六进制数转换为十进制数,并转换为其他进制数int nJ=O.y=O,i,s;int b|N;printf(Min输入d进制位数scanf(,%d,&n);print”请输入(1

8、进制的每位并使每位用空格隔开:Q;强制类型转换,以免造成数据丢失for(i=0;i=0;i-)y+=(int)pow(fj)*bi;j+;printfC请输出所得的10进制的结果:-);printf(M%d,y);printf(Mn需要转换的进制M:);scanf(H%d,&s);printf(”请输出转换成d进制的结果:”,s);DtoM(y,s);return 0:)voidmain()是主函数,功能是给出测试的数据,并在特立条件下调用D2M()函数和M2D() 函数 void main()printf(Htt* * * * * * * * 数组解决* * *nM); printf(tt*

9、数制转换系统*n);printf(Mtt*1.进入数制转换系统*n);printf(tt*2.退出数制转换系统*n);printf(Htt* * * * * * * * printf(Htt请按(1 或 2):H);loop:scanf(,%d,&t);switch(t) case 1:printf(H请选择一个需转换的进制 M(2 or 8 or 10 or 16): J; scanf(,%d,&m);if(m=2llm=8)MtoD(m);else if(m=16)HtoD(m);else if(m=10)二进制和八进制转换成十进制十六进制转换成十进制十进制转换成其它进制printf(ui

10、H正确输入一个d进制数 scanf(H%dH,&x);prints输入需要转换成的进制M(2 or 8 or 16): J; scanf(H%d*&r);printf(请输岀转换成d进制的结果:,r); DtoM(x,r);printf(,rnH);break;case 2: exit(O);goto loop;printf(HnM);文件 zhystack.cpp#include#include#include#include#define STACKJNIT_SIZE 100存储空间初始分配量#define STACKINCREMENT 10存储空间分配增咼int c,m,x,s,t; /

11、x为要转换的十进制数,e为临时用的的int型变量int r.y,i,n;typcdef stnictint *base;栈底int *top;栈顶int stacksize; /栈容量)SqStack:/SqStack泄义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量以下为 int InitStack(SqStack &S)到 int DestroyStack(SqStack &S)六大模块分别表示构造一个 空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈: int InitStack(SqStack &S)/构造一个空栈S.base=(int *)

12、malloc(STACK_INIT_SIZE *sizeof(int);S.top=S.base:S.stacksize=STACK_INIT_SIZE:return 0:int GetTop(SqStack S, int &c)若栈不为空,则用c返回S的栈顶元素,并返回0,否则返回1if(S.top=S.base) return 1;e=*(S.top-l);return 0;)int Push(SqStack &S , int e)插入元素e为新的栈顶元素if(S.top-S.base=S.stacksize)栈满,追加存储空间S.base=(int *)realloc(S.base,(S

13、.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base) return 1 ;/存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT:*S.top+=e:int Pop(SqStack &S, int&c) 若栈不空,则删除S的栈顶元素,用c返回其值,并返回 0,否则返回1if(S.top=S.base) return 1;e=*-S.top;return 0: int StackEmpty(SqStack S) 若栈空,则返回1,否则返回0 if(S.top=S.base)return

14、 1;return 0;int DestroyStack(SqStack &S)/销毁栈 S,栈 S 不再存在free(S.base);S.top=NULL:防止程序后而不小心使用了它S.base=S.top;return 0;以下SqStack S是指泄义栈SSqStack S;/定义栈 S/下而的D2M(int b)的功能是将十进制数转换成M进制的函数 DtoM(int b)十进制转换成其他进制的函数DtoM()while(a)r=a%b;if(r9)r=r+55;Push(S,r);/压入栈a/=b;转换成M进制printf(H该数转换成知 进制的结果化b); w

15、hile(! StackEmpty(S)Pop(S.e);/弹出栈if(e=65)primf(%c;c);elseprintf(H%de);/下而是M2D(),它的功能是M进制转换为十进制的函数MtoD()英他进制转换为十进制的函数MtoD()char c 1000;printfC请输入需要转换的数的位数:“);scanf(H%d*&n);print”请输入需要转换的数的每位并用空格隔开:”);for(i=0;in;i+)scanf(H%x*&ci);Push(S,ci);i=0;while( IStackEmpty(S)Pop(S.e);y+=(int)pow(m,i)*e;i+;print

16、f(M转换成10进制的结果是:”);printf(%d,y);return 0;/void maino主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特立情形 下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换 void main()int t;for(;)printf(Htt* * 栈解决 *printf(tt*数制转换系统*n);printf(Mtt*1.进入数制转换系统*n);printf(tt*2.退出数制转换系统*n);printf(Htt* * * 孝* * *nH);printf(Htt请选择(1 或 2):”);loop:scanf(H%dH

17、,&t);switch(t) case l:InitStack(S); /构造一个空栈printf(储选择一个需转换的进制M(2or8orl0orl6):H);scanf(” d”、&m);if(m=10)十进制转换成其他进制(primfC储给定一个需要转换的10进制数:”);scanf(H%dN,&x);printfC请正确输入需要转换成的进制数:”);scanf(M%dH.&t);DtoM(x.t);if(m=2llm=8llm=16)英他进制转换成十进制,且其他任意进制的相互转换MtoD();printf(n给定要转换成的进制21:”);scanf(H%d*&s);DtoM(y,s);p

18、rimf(W);DestroyStack(S); 销毁栈S,栈S不再存在break;case 2: exit(O);default:! printf(输入有误,请重新选择goto loop;printf(Hnu);3、运行及测试情况 数组栈4、总结(1) 通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。掌 握了如何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后 出的特点。(2)在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如 设置断点和单步调试,让我们意识到要想学好编程,就得多上机调试。一个星期时间自己用 vc实现了进制转换问题,收获很大同时在编写代码过程中也出现了很多的问题,最大的问 题就是对程序设计框架结构的不了解,在实现代码与功能的连接时经常会岀现各种不同的错 误,在实现一些功能时系统常常会报错,许多错误不知从哪修改。课程设汁中,回顾了很多 以前的东西,收获很大。

温馨提示

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

评论

0/150

提交评论