ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:151.38KB ,
资源ID:9128123      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9128123.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计.docx

1、数据结构课程设计附件23信息与电气工程学院课程设计说明书(2012 /2013 学年第 二 学期)课程名称 : 数据结构 题 目 : 数制转换 专业班级 : 计算机1101班 学生姓名 : . 学 号: 11021012x 指导教师 : . 设计周数 : 1719周 设计成绩 : 年 月 日1、设计目的1.1、问题描述任意给定一个M进制的数x,转换为其它任意进制的数据。1.2、基本要求、对给字一个M进制的数据x,求出此数x的10进制值(用MD表示);、实现对x向任意的一个非M进制的数的转换;、至少用两种方法实现上述要求(用栈解决,用数组解决,其它方法解决)。2、设计正文2.1、系统分析2.1.

2、1、用数组实现该问题:DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第、位并分别乘以M的、次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数将其转换为非M进制的数。2.1.2

3、用栈实现该问题:同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。2.2、模块划分2.2.1、用数组实现该问题:i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为;DtoM(int g,int h)是实现十进制数转换为M进制数的函数;MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,

4、int h)实现向非十六进制数的转换;void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。2.2.2、用栈实现该问题:SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;SqStack S是指定义栈S;DtoM(int a,int b)的功能是将十进制数转换成M进制的函数;MtoD()的功能是M进制转换为十进

5、制的函数;void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用DtoM()函数和MtoD()函数,而且实现M进制数向任意非M进制数的转换。2.3流程图2.3.1数组流程图2.3.2、栈流程图2.4、源程序源程序有两个,shuzu.cpp是用数组实现该问题的程序,而stack.cpp是用栈实现该问题的程序。文件zhyshuzu.cpp#include#include#include#include#define N 1000/ 以下为DtoM(int g,int h)是实现十进制数转换为M进制数的函数,DtoM(int g,int h) int cN;

6、 int i=0;int j; int reminder; reminder=g%h; g=g/h; if(reminder9) ci=reminder+55; i+; else ci=reminder; i+; if(g0) DtoM(g,h); for(j=i-1;j=0;j-) if(cj=65) printf(%c,cj); else printf(%d,cj); /以下MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换MtoD(int e) /二进制和八进制数转换为十进制数,并这转换为其他进制数

7、 int n,i,y=0,j,s; int aN; printf(请输入%d进制位数:,e); scanf(%d,&n); j=0; printf(请输入%d进制的每位并使每位用空格隔开:,e); for(i=n-1;i=0;i-) scanf(%d,&ai); for(i=0;in;i+) y+=(int)pow(e,j)*ai; /强制类型转换,以免造成数据丢失 j+; printf(所得的10进制的结果:%d ,y); printf(n需要转换的进制M:); scanf(%d,&s); printf(请输出转换成%d进制的结果:,s); DtoM(y,s); return 0;/以下为H

8、toD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换HtoD(int f) /十六进制数转换为十进制数,并转换为其他进制数 int n,j=0,y=0,i,s; int bN; printf(请输入%d进制位数:,f); scanf(%d,&n); printf(请输入%d进制的每位并使每位用空格隔开:,f); for(i=0;i=0;i-) y+=(int)pow(f,j)*bi; /强制类型转换,以免造成数据丢失 j+; printf(请输出所得的10进制的结果: ); printf(%d,y); printf(n需

9、要转换的进制M:); scanf(%d,&s); printf(请输出转换成%d进制的结果:,s); DtoM(y,s); return 0;/ void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数void main() int m,r,x,t; for(;) printf(tt* * * * * * * * 数组解决* * * * * * * * * * *n); printf(tt* 数制转换系统 *n); printf(tt* 1. 进入数制转换系统 *n); printf(tt* 2. 退出数制转换系统 *n); printf(tt*

10、* * * * * * * * * * * * * * * * * * * * * *n); printf(tt 请按(1或2):); loop:scanf(%d,&t); switch(t) case 1:printf(请选择一个需转换的进制M(2 or 8 or 10 or 16):); scanf(%d,&m); if(m=2|m=8) /二进制和八进制转换成十进制 MtoD(m); else if(m=16) /十六进制转换成十进制 HtoD(m); else if(m=10) /十进制转换成其它进制 printf(请正确输入一个%d进制数:,m); scanf(%d,&x); pri

11、ntf(请输入需要转换成的进制M(2 or 8 or 16):); scanf(%d,&r); printf(请输出转换成%d进制的结果:,r); DtoM(x,r); printf(n); break; case 2: exit(0); default: printf(输入有误,请重新选择:); goto loop; printf(n); 文件zhystack.cpp#include#include#include#include#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 /存储空间分配增量int e,m,x

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

13、ase=(int *)malloc(STACK_INIT_SIZE *sizeof(int); if(!S.base) exit(0); /存储空间失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 0;int GetTop(SqStack S, int &e) /若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 if(S.top=S.base) return 1; e=*(S.top-1); return 0;int Push(SqStack &S , int e) /插入元素e为新的栈顶元素 if(S.top-S.base=S.

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

15、return 0;int StackEmpty(SqStack S) /若栈空,则返回1,否则返回0 if(S.top=S.base) return 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 a,int b)的功能是将十进制数转换成M进制的函数DtoM(int a,int b) /十进制转换成其他进制的函

16、数DtoM() while(a) r=a%b; if(r9) r=r+55; Push(S,r); /压入栈 a/=b; /转换成M进制 printf(该数转换成%d进制的结果:,b); while(!StackEmpty(S) Pop(S,e); /弹出栈 if(e=65) printf(%c,e); else printf(%d,e); return 0;/ 下面是M2D(),它的功能是M进制转换为十进制的函数MtoD() /其他进制转换为十进制的函数MtoD() char c1000; printf(请输入需要转换的数的位数:); scanf(%d,&n); printf(请输入需要转换

17、的数的每位并用空格隔开:); for(i=0;in;i+) scanf(%x,&ci); Push(S,ci); i=0; while(!StackEmpty(S) Pop(S,e); y+=(int)pow(m,i)*e; i+; printf(转换成10进制的结果是:); printf(%d,y); return 0;/void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换void main() int t; for(;) printf(tt* * * * * * * * *栈解

18、决 * * * * * * * * * * *n); printf(tt* 数制转换系统 *n); printf(tt* 1. 进入数制转换系统 *n); printf(tt* 2. 退出数制转换系统 *n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt 请选择(1或2):); loop:scanf(%d,&t); switch(t) case 1:InitStack(S); /构造一个空栈 printf(请选择一个需转换的进制M(2or8or10or16):); scanf(%d,&m); if(m=

19、10) /十进制转换成其他进制 printf(请给定一个需要转换的10进制数:); scanf(%d,&x); printf(请正确输入需要转换成的进制数:); scanf(%d,&t); DtoM(x,t); if(m=2|m=8|m=16) /其他进制转换成十进制,且其他任意进制的相互转换 MtoD(); printf(n给定要转换成的进制M:); scanf(%d,&s); DtoM(y,s); printf(n); DestroyStack(S); /销毁栈S,栈S不再存在 break; case 2: exit(0); default: printf(输入有误,请重新选择:); go

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

21、不知从哪修改。课程设计中,回顾了很多以前的东西,收获很大。(3)每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个体学习到整体把握的跳跃,对新知识的汲取,更是把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加了自信和学习的动力。 (4)总之,我们收获匪浅首先由衷感谢老师提供这样一个锻炼自己的机会,感受到学来的知识不只是用来完成试卷的。一向惯于独立思考的自己学会了积极的同同学、朋友交流,取长补短,共同进步。课程设计使自己发现考试并不是最重要,最重要的是能运用所学的知识。在整个课程设计的学习过程中,不再是用学到的知识解题,而是在实际运用时遇到什么学什么,重在把知识应用于实际。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1