数据结构课程设计数制转换_第1页
数据结构课程设计数制转换_第2页
数据结构课程设计数制转换_第3页
数据结构课程设计数制转换_第4页
数据结构课程设计数制转换_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

1、目录1前言11.1 设计背景和意义11.1.1 数据结构简介21.1. 2选择算法的原因21.2 设计的原理和内容22正文22.1 设计的目的和意义22.2 目标和总体方案22.3 设计方法和内容32. 3. 1模块划分32. 3. 2主要程序模块32.4程序的设计思想和内容61 .4.1用数组实现该问题.62 . 4. 2用栈实现该问题62.5设计创新和关键技术62. 6粉调试62.7程序流程图72. 8结论8参考文献9附录9word1前言1.1 设计背景和意义1.1.1 数据结构简介数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。数据结 构是研究数据之间的相互关系,也

2、即数据的组织形式的一门科学。它不仅是计算机学科的核 心课程,数据结构是计算机存储、组织数据的方式。通常情况下,精心选择的数据结构可以 带来更高的运行或者存储效率的算法。在计算机科学中,“数据结构”不仅是一般程序设计 的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程 序的重要基础。1.1.2 选择算法的原因在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系 统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优 的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来, 我们根据特定算法来

3、选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常 重要的。1.2 设计的原理和内容设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将 10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。本软件采用C 语言编写以VC+作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后 进先出的特点,易于结果输出。操作简单,界面清晰,易于为用户所接受。2正文1.1 设计的目的和意义我们是计算机科学与技术专业的本科生,数据结构是我们重要的必修课程。当代社 会学要大学培养出理论扎实,动手实践能力强的大学生。所以,本次课程设计的目的就在于 通

4、过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的 认识。为后继课程的学习打下坚实的基础。通过本次数据结构课程设计,我们基本上掌握了 课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的 帮助和提高,加深了我们对数据结构的理解,为今后的学习打下了坚实的基础。同时也提 高了我们对于编程这方面的能力。1.2 目标和总体方案本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方 案:程序的设计第一步:查阅有关数据结构数制转换操作的资料,用半天的时间。第二步:设计这个项目的整体架构和算法。用一到两天的时间。第三步:使用C语言

5、程序设计程序语言进行算法的描述。两天的时间。程序的调试进行程序的调试。用一天。最后,我在完整的整理一遍,完成课设。1.3 设计方法和内容2. 3.1模块划分3. 3.1.1用数组实现该问题(1) i,s,m,r, reminder, x是定义的全局变量,初始值都为0 ;(2) D2M(int g, int h)是实现十进制数转换为M进制数的函数:(3) M2D0是实现V(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其 中调用D2M(int g, int h)实现向非M进制数的转换:(4) H2D(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g, i

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

7、进制数转换成M进制的函数:(5) M2D0的功能是M进制转换为十进制的函数:(6) voidmainO是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在 特定情形下调用D2MO函数和M2DO函数,而且实现M进制数向转任意非M进制数的换。2. 3. 2主要程序模块(1):D2M(int g, int h)(int cN;i=0;reminder=g与h;g=g/h;if(reminder>9)(ci=reminder+55;i+;)elseci=reminder;i+; ) if(g>0) D2M(g,h); for (j=i-l;j>=0;j) if(cj>=

8、65) printf(“%c",cEj);else printfcj); return 0;)自定义函数D2M用于在用数组实现该问题的程序中十进制数转换为其他进制数 (2):M2D(int e) ( int aN; printf ("请输入为d进制位数:m); scanf &n); printf (请输入加进制的每位并使每位用空格隔开:",m); for(i=0;i<n;i+) scanf("与d”, &ai); for(i=n-l;i>=0;i) ( y+=(int)pow(e,强制类型转换,以免造成数据丢失j+;)prin

9、tf (请输出所得的10进制的结果:);printf (%d”, y);printf (?,n需要转换的进制M:); scanf (%d", &s);printf (请输出转换成对进制的结果:,s);D2M(y, s); return 0; ) 自定义函数也D用于在用数组实现该问题的程序中二进制和八进制数转换为十进制数, 并且转换为其他进制数 (3): H2D(int f) ( int bN; printf (请输入%d进制位数:”,m); scanf ("d”, &n); printf ("请输入刎进制的每位并使每位用空格隔开for(i=0;i&

10、lt;n;i+)scanf (%;for(i=n-l;i>=0;i)( y+=(int)pow(f, ;强制类型转换,以免造成数据丢失j+;)printf ("请输出所得的10进制的结果:);prirrtf (飞d”, y);printf(n需要转换的进制M:);scanf (线d, &s);printf (”请输出转换成对进制的结果:,s);D2M(y, s);return 0;自定义函数H2D用于在用数组实现该问题的程序中十六进制数转换为十进制数,并转换 为其他进制数(4):D2M(int a, int b)(while(a)(r=a%b;if(r>9)r=r

11、+55;Push(S, r); 压入栈a/二b;转换成M进制) printf (该数转换成用d进制的结果:",b);while(JStackEmpty(S)(Pop(S, e) ;/弹出栈if(e>=65)printfe);elseprintfe);)return 0;)自定义函数D2M用于在用栈实现该问题的程序中十进制数转换成其他进制数(5):M2DO其他进制数转换为十进制数char c1000;printf (请输入需要转换的数的位数:“);scanf (飞d”, &n);printf ("请输入需要转换的数的每位并用空格隔开:);for(i=0;i<

12、;n;i+)scanf &ci);Push(S, ci);i=0;while(JStackEmpty(S)Pop(S, e); y+=(int)pow(m, i)*e; i+;printf (转换成10进制的结果是:); printfCz%dy);return 0;)自定义函数X2D用于用栈实现该问题的程序中其他进制数转换为十进制数2.4程序的设计思想和内容2. 4.1用数组实现该问题D2M()函数和M2DO函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其 它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整, 接着通过递归调用D2Mo函数依次

13、将得到的整数部分依次先取余后取整,并将所得的余数依 次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而M2D()函数则是 实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进 制数的最后一位开始算,依次列为第0、1、2n位并分别乘以M的0、1、2n次方, 将得到的次方相加便得到对应的十进制数,再调用D2XO函数将其转换为非M进制的数。2. 4. 2用栈实现该问题同样是利用D2Mo和M2D0两个函数实现。两个函数的思想同利用数组实现时相同。只 是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。2.5 设计创新和关键技术利用了栈的先进后

14、出特点来满足数制转换中从最后一位余数依次取出的要求,利用数组 的特性依次存储取于数运算的结果余数,再从该数组的最后一个元素从后往前依次取出即为 转换后的数。2.6 程序调试1十进制数527的调试情况如下:请请请该P不要成 ¥-S 人定人转 .H趣的10进制数:527 专换成的进制数,2 进制的结果壮丽的aunkey to continue2十六进制数1A2c9的调试情况如下:-入人成要整 止数L.I|M<2oi*Sop10op16):16的数的位数=5琴售整电数的每位并用空格隔开"10进制的结果是"07209转换成的进能换成8进制的结果:32i3乜any k

15、ey to continue2.7程序流程图2.8结论通过本次课程设计,我认识到熟练掌握基础算法的重要性,对栈的含义及其基本算法有 了更好的理解和应用。栈“先进后出”的算法加上Push。和Pop()方便了对要转换的数进 行读取,和对转换后数倒置的输出。在编写过程中常遇到的不少问题,例如,变量类型的转 换和ASCH码转义字符的应用,变量的定义和范围,算法循环语句的退出条件等,我通过不 断调试,翻阅课本和网上搜索材料得到了解决,也认识到这些细节上的处理更当注意。在调 试时,学会了在有问题的地方注释并能经常使用printf ()函数测试输出结果。在测试时对测 试数据的选取更当考虑全面能检测错误输入并

16、进行提示。通过这次实验我学会运用课本和老 师平时讲授知识进行切身实践,通过网络搜索学到了新的库函数,提高了我实际编写程序的 能力。弁考文献1严蔚敏,吴伟民编著.数据结构(C语言版).清华大学出版社,2006年2李春葆,曾慧,张植民编著.数据结构程序设计题典.清华大学出版社,2002年3郭翠英编著.C语言课程设计案例精编.中国水利水电出版社,2004年4谭浩强编著.C程序设计.清华大学出版社,2005年5许卓群,张乃孝,杨冬青,唐世渭编著.数据结构.高等教育出版社,1988年6晋良颍编著.数据结构.人民邮电出版社,2002年附录用数组实现:#include<stdio.h>#incl

17、ude<math. h>#define N 1000 int i, j, y, n, s; int m,r,reminder;int x;全局变量默认初始化为0,不必再赋0 了D2M(int g, int h)十进制数转换为其他进制数(int cN;1=0;reminder=g%h;g=g/h;if(reminder>9) (ci=reminder+55; i+;) else (ci=reminder; i+;)if(g>0)D2M(g,h);for (j=i-l; j>=0; j)if(cj>=65)printf (飞c”, cj); elseprintf

18、 (飞d”, cj);return 0; )M2D(int e)二进制和八进制数转换为十进制数,并这转换为其他进制数(int aN;printf ("请输入为d进制位数:”,m);scanf &n);printf (”请输入加进制的每位并使每位用空格隔开:",m);for(i=0;i<n;i+)scanf("$d”,&ai);for(i=n-l;i>=0;i)(y+=(int)pow(e,强制类型转换,以免造成数据丢失j+;)printf (请输出所得的10进制的结果:);printf y);printfCn需要转换的进制M:);sca

19、nf (“"d”, &s);printf (请输出转换成对进制的结果:,s);D2M(y, s);return 0;H2D(int f)十六进制数转换为十进制数,并转换为其他进制数( int bN;printf ("请输入为d进制位数:”,m);scanf (线d', &n);printf ("请输入刎进制的每位并使每位用空格隔开:",m); for(i=0;i<n;i+) scanf;for(i=n-l;i>=0;i) (y+=(int)pow(f,强制类型转换,以免造成数据丢失j+; ) printf ("

20、;请输出所得的10进制的结果:); printf y); printf (n需要转换的进制M:); scanf (飞d', &s);printf (”请输出转换成对进制的结果:,s);D2M(y, s);return 0;void mainO (printf ("请给定一个需转换的进制M(2or8orl0orl6); scanf (“$d”, &m);if (m=2 m=8)二进制和八进制转换成十进制M2D (m);else if (m=16)十六进制转换成十进制H2D (m);else if(m=10)十进制转换成其它进制printf (请输入一个%d进制数

21、:,m);scanf ("$d”, &x);printf ("请输入需要转换成的进制M(2or8orl6):");scanf (“$d", &r);printf (请输出转换成对进制的结果:",r);D2M (x, r);)printf (/zn*);)用栈实现:#include<stdio. h>#include<malloc. h>#include<stdlib. h>#include<math. h>define STACK_INIT_SIZE 100存储空间初始分配量#de

22、fine STACKINCREMENT 10存储空间分配增量int e,m, x, s, t; /x为要转换的十进制数,e为临时用的的int型变量int r, y, i,n;typedef structint *base;栈底int *top;栈顶int stacksize; 栈容量SqStack;int InitStack (SqStack &S) 构造一个空栈S. base=(int *)malloc(STACK_INIT_SIZE *sizeof (int);if(!S. base) exit(0); 存储空间失败S. top=S. base;S. stacksize=STACK

23、 INIT SIZE;return 0;)int GetTop(SqStack S, int &e) 若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if (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. stacksize) /栈满,追加存储空间S. base=(int *)realloc(S. base,(S. stacksize+STACKINCREENT)*sizeof(in

24、t);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.否则返回1if (S. top=S. base) return 1;e=*-S. top;return 0;)int StackEmpty(SqStack S) /若栈空,则返回1,否则返回0if (S. top=S. base) return 1;return 0 ;)int DestroyStack (SqStack &S) 销毁栈 S,栈 S 不再存在 free(S. base);5. top=NULL;防止程序后而不小心使用了它6. base=S. top;return 0 ;)SqStack S;定义栈 SD2M(int a, int b)十进制转换成其他进制的函数D2M()(while (a)(r=a%b;if(r>9)r=r+55;Pus

温馨提示

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

评论

0/150

提交评论