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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数制转换数据结构Word文档格式.docx

1、设计要求:任意给定一个M进制的数x,实现功能:1)对输入的任意数制能够求出此数的10进制值,2)实现在2,8,10,16进制之间对输入的任意数制x向任意的一个非M进制数的转换。3)至少用两种或两种以上的算法实现上述功能要求。工作期限:设计工作自2014年6月16日至2014年6月27日止。指导教师: 杨全 院长: 日 期:2014年6月16日软件学院课程设计进度安排表 王康琦 学号:1402120327 专业: 软件工程 班级: 12级三班 起止日期内 容备注6月16日 6月 17日下任务书;收集、阅读、整理相关参考文献,并进行归纳和概括总结,完成项目/任务背景介绍部分文字内容。6月18日11

2、月20日系统功能设计和模块设计、系统体系结构构建。6月21日6月24日各功能模块编码实现,系统各功能模块调试与维护。6月25日6月26日系统功能集成、系统调试与测试,按照模板要求撰写课程设计/项目设计报告。6月27日课程设计/项目设计分组答辩,提交课程设计/项目设计报告以及相关文档,进行成绩评定。指导教师签名: 2014年6月16日成绩评定表 1402120327 专业:类别合计分值各项分值评分标准实际得分合计得分平时表现10按时参加设计指导,无违反纪律情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。能对其设计内容进行详细、完整的介绍,并能就指导教师提出

3、的问题进行正确的回答。报告质量35报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整规范,整齐划一。5课题背景介绍清楚,综述分析充分。设计方案合理、可行,论证严谨,逻辑性强,具有说服力。符号统一;图表完备、符合规范要求。能对整个设计过程进行全面的总结,得出有价值的结论或结果。参考文献数量在2篇以上,格式符合要求,在正文中正确引用。答辩情况25在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地回答教师所提出的问题。总评成绩: 分 指导教师: (签字) 日期:2014 年6月 27 日目录第一章

4、 课题背景 11.1 引言 11.1.1 课程设计目的 1第二章 设计简介及设计方案论述 22.1 选题分析 22.1.1数组的结构 22.1.2栈的结构 22.1.3递归的结构 2第三章 详细设计 33.1 算法说明 33.1.1 数组的算法 33.1.2 栈的算法 43.1.3 递归的算法 43.2 变量设计 43.3 函数功能设计 5第四章 设计结果及分析 64.1 运行与调试说明及分析 6总结 12参考文献 13摘 要摘要:在生活中我们经常会遇到各式各样的数制,例如2,8,10,16进制,其实数制之间的转换问题不仅仅是数学问题,还是我们计算机需要研究的范围之一,其中包括有数据结构,C语

5、言中的递归算法与数组的存储问题。本设计在2,8,10,16进制之间,能实现对输入的任意数制进行相对应的数制转换。在此程序设计中我采用了C语言中的数组与递归的算法,以及数据结构中的栈,实现了如下功能:1.对输入的任意数制能够求出此数的10进制值2.实现在2,8,10,16进制之间对输入的任意数制x向任意的一个非M进制数的转换。3.至少用两种或两种以上的算法实现上述功能要求。系统开发平台为Windows7,程序设计设计语言采用C语言,程序运行平台为VC+6.0。关键词: 程序设计;数制转换;C;课程设计;数据结构第一章 课题背景1.1 引言1.1.1 课程设计目的在生活中我们经常会遇到各式各样的数

6、制,例如2,8,10,16进制,其实数制之间的转换问题不仅仅是数学问题,还是我们计算机需要研究的范围之一。高速发展的现代社会,计算机浩浩荡荡地成为了人们生活中不可缺少的一部分,帮助人们解决通信,联络,互动等各方面的问题。计算机在处理数字是和人是不同的,计算机使用的是二进制,人们在日常生活中使用十进制,但是在一些特定场合使用其他进制的表示,所以需要进行不同进制之间的转换其中包括有数据结构,C语言中的递归算法与数组的存储问题。在程序设计中,可以用使用很多种方法解决该问题。例如:数组、栈、递归。不同的方法实现转换的原理基本相同,只是代码的细节不同。 在我的程序中不同的方法所需的函数在一个单独的头文件

7、里面,便以管理和修改。第二章 设计简介及设计方案论述2.1 选题分析 2.1.1数组的结构 为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。由于处理简单的情况,最大的数字将不大于整形的范围,整形为4个字节,因此开辟的数组为33个元素。 2.1.2栈的结构 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。在此程序中我

8、首先定义了一个结构体,结构体中包含栈元素的首地址、栈顶位置、栈顶位置、栈的最大范围。栈元素的存储空间在程序中再动态开辟。和上面一样,栈的最大为33。 2.1.3递归的结构 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。在这个程序中,递归不需要自己定义存储空间,大量的减少了需要定义变量所需要的存储空间。第三章 详细设计3.1 算

9、法说明在此程序的算法设计中,我采用了数组,栈,递归的算法。3.1.1 数组的算法 M进制转十进制:从该M进制数的最后一位开始算,依次列为第0、1、2.n位并分别乘以M的0、1、2.n次方,将得到的次方相加便得到对应的十进制数。由于输入的M进制的数可能出现字符,所以使用了字符数组进行存储。并在输入后将字符全部转换为数字,并存储到全局变量s数组里面,每个数组元素存储一位。图3-1 M进制转十进制处理流程图十进制转换为其他进制:首先取x对需要转换的进制n取余,然后再对其取整,将取到的余数存入数组中,然后重复上面的步骤,将得到的余数依次存入数组中,知道x变成0。然后将数组反向输出。输出的数可能大于10

10、,所以进行了必要的判断。3.1.2 栈的算法 算法思路和上面基本相同,只是将取到的余数依次入栈,输出时只要依次出栈就行。3.1.3 递归的算法 递归过程中不需要另外的存储取到的余数,只需要在递归返回时输出相应的结果就行。3.2 变量设计 #define MAX 0x7fffffff 定义了整形数的最大值,防止数字溢出。int m; 用于表示输入的数据是哪个进制的数。char s33; 输入时用于存储输入的十进制数x的m进制表示。处理过程中用于存储m进制表示的每一位所代表的的数字。 int n; 要将输入的m进制数转换成的进制。 int len; 输入的字符数据有多长。 注:其他变量在程序中均有

11、说明。3.3 函数功能设计表5-1 程序中的函数函数功能int Turn10( int l );将m进制的数转换成十进制数void Turnx( int x );将十进制的数转换成n进制数int CalcRecursion( int k, int c );将m进制转换成10进制void Recursion( int x );将十进制数x转换成n进制数void InitStack( PSTACK s );初始化栈void Push( PSTACK s, int x );将一个元素压入栈中int Pop( PSTACK s );取出栈顶元素void UseStack( int x );void C

12、onvert( char *s );将输入的数据转换成数字第四章 设计结果及分析4.1 运行与调试说明及分析程序开始运行时提示用户按照规定的输入格式输入数据数据的进制不能超过36,因为36后不好表达。数据中也不能出现除a.z,A.Z,0.9之外的字符m进制数中的每一位不可能大于等于m,否则数据应该是错的。当数据输入正确时将给出不同进制之间的转换结果输出完成后,程序将正常结束。总结数据结构是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第一节课起,老师就为我们阐述了它的重要性。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。刚开始学的时候确实有很多地方我很不理解,每次上

13、课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。VC+6.0里检查错误有时候真是让你难以找到为什么错。经过了这次课程设计,现在已经可以了解很多错误的原因,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。在这一段努力学习的过程中,我的编程设计有

14、了明显的提高。虽然程序中不是很完美,还未能实现对小数之间的数制转换问题,但是对于我来说已经不错了,今后还需继续努力。参考文献附录1:源程序清单/程序名称:课程设计.c/程序功能:分别采用数组、栈、递归实现进制间的转换/程序作者:余岁/最后修改日期:2014-6-24#include string.hstdlib.h#include public.h /公用的函数头文件array.h /数组实现转换的头文件Recursion.h /递归实现转换的头文件stack.h /堆栈实现转换的头文件int main() int x, i; while ( 1 ) system( pause );cls /

15、提示用户按照正确的格式输入数据 printf( 请输入要转换的数据, 格式:原数据进制 数据 要转换的进制(36 | n36 )输入的进制超出了可以表达的范围! /计算数字用m进制表示时的位数 len = strlen( s ); /数据的位数 for ( i=0; ilen; +i ) if ( si=58 & si=91 & si 122 ) break; if ( i != len ) printf( 输入的数据中出现不符合要求的字符! continue; Convert( s ); /将字符数据转换为数字,并存入数组中 if ( si m )输入的数据有错误! break; /计算出x

16、的十进制表示,便以后面的使用 x = Turn10( len ); /输出使用数组计算出的结果 printf( 用数组算出x为:%dn, x ); /输出使用递归计算出的结果用递归算出x为:, CalcRecursion( len-1, 1 ) ); /转换为其他进制 /x的n进制表示,用数组实现%d的%d进制表示(数组计算): , x, n ); Turnx( x ); /x的n进制表示,用递归实现%d的%d进制表示(递归计算): Recursion( x ); /x的n进制表示,用堆栈实现n%d的%d进制表示(堆栈计算): UseStack( x ); return 0;/头文件名称:ar

17、ray.h/* *功能: *参数:l: s数组元素的个数*/int Turn10( int l ) int a32=1, i=0, result; /数组a存储m的k次幂, result为转换后的十进制数 /当ai*m不会超出整形范围 while ( ai =0; -l, +i ) /当s的下标减少时,a的下标应该增加 result += sl*ai; /将得到的次方乘以x中一位相乘后相加 return result; /返回得到的十进制数x: 十进制数值void Turnx( int x ) int i=0, t; char result32; /n进制表示的每一位 while ( x )

18、/当x不为0时 t = x%n; /用t保存x对n的余数,便以下面判断 if ( t 9 ) resulti+ = t-10+A; /大于9的数用字母A.F表示 resulti+ = t+0 /小于9的数用字符0.9表示 x /= n; for ( -i; i -i ) /逆向输出每一位%c, resulti );public.h#define MAX 0x7fffffffint m; /输入的数据为哪个进制int n; /要转换成哪个进制int len; /输入的字符串的长度 /m进制数s:输入的x的m进制的字符串指针void Convert( char *s ) int i = 0; /从

19、字符串的0地址开始 while ( si ) /当si!=0的 /字符转换成对应的数字 if ( si=a &z ) si = si-+10;Z ) si -= Recursion.hk:初始化时为s数组元素的个数,递归时为数组的下标 c:m的k-1次方int CalcRecursion( int k, int c ) if ( k = 0 ) /下标=0时 /返回k对应的元素乘以对应的次方 return sk*c + CalcRecursion( k-1, c*m ); else return 0;十进制数xvoid Recursion( int x ) int t; if ( x 0 )

20、Recursion( x/n ); 10 ), t-10+%d, t );stack.hmalloc.h#define MAXSTACK 33 /堆栈的最大位置/定义栈数据结构typedef struct _stack int *addr; /栈的存储地址 int length; /栈的最大长度 int top; /栈顶 int bottom; /栈底STACK, *PSTACK;栈的地址void InitStack( PSTACK s ) s-addr = malloc( MAXSTACK*sizeof( int ) ); /申请空间length = MAXSTACK; /设定栈的最大长度top = -1;bottom = 0; /初始化栈指针 x:要压入的元素*

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

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