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

下载本文档

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

文档简介

1、课程设计报告设计题目:进制转换问题学生姓名:专 业:信息安全班 级:信息安全 10-02学 号:指导教师:完成日期: 2011 年 12 月课程设计报告的内容及要求一、问题描述 :任意给定一个 M进制的数x,请实现如下要求:1求出此数x的10进制值(用MD表示)2、实现对x向任意的一个非M进制的数的转换3、至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决) 软件环境: Vc6.0 编程软件二、实验环境运行平台: Win32 硬件:普通个人 pc 机 软件环境: VC+6.0 编程软件三、解决办法 :1、用数组实现该问题:ten_else() 函数是实现十进制转换为其它

2、进制的函数, 先设置一个 while 循环, 当十进 制数g等于零时停止,再将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整, 并将所得的余数依次存入一个数组中, 然后逆向取出数组中的元素, 即得到转换后的 结果。将其他进制 M转换为十进制,并将其转换为非M进制数是在主函数中实现的。M进制转十进制则是从该 M进制数的最后一位开始算,依次列为第0、1、2n位并分别乘以M的0、1、2n次方,将得到的次方相加便得到对应的十进制数,再调用ten_else ()函数将其转换为非 M进制的数。实际上十进制起到了一个桥梁作用。2、用栈实现该问题:与数组方法核心思想相同, stack 定义栈,初

3、始化一个空栈,然后判断是否为空,接着 是去栈顶元素(用 z表示栈顶元素),数据入栈,出栈的操作。栈具有后进先出的性质,故 其用 s.pop() 取数较数组的逆向取数较为方便,体现了栈的优越性。四、设计和编码的回顾讨论和分析(1) 函数 ten_else() 的作用体现在将任意 10 进制数转换为非 10 进制数,程序能实现 116 进制的相互转换。在 10 进制以上的数需要用字母表示,由此设计了 switch 函数,当出现余数大与10的情况可以调用相应的字母。考虑到最终结果是所求余数的倒序,添加新的整型变量j,通过一个for循环实现倒序。(2) 编程初期设计了 else_ten函数,后几经修改

4、将其融入main函数中较为直观。(3) 当输入10进制以下的数向10进制转换时候较为简单,程序中设计char型数组smaxnum 来统计所输入数据的位数,不需要用户输入。在求10进制的时候通过for循环求一个累和即 可。(4) 当输入10进制以上的数设计字母较为复杂,通过对ASCH表的理解设计程序。(5) 在用栈法实现非10进制向10进制转换的时候遇到了些麻烦, 当输入8A的时候程序将8 当成字符类型,将其编译为数字 56,导致最终转换结果出现错误。于是通过查阅ASCH表对程序做出了修正,设计了条件语句if(z=65)z-=65;z+=10;五、程序框图六、经验和体会(1) 我们在写程序的时候

5、要多角度考虑问题,比如题目中要求栈法与数组方法同时去实现进制转换问题。在编译过程中我们可以将特殊的问题逐渐的化为一般问题,比如10进制转换到16进制是,我举的例子是 200转换为C&(2) 通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。掌握了如 何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后出的特 点。(3) 在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如设置断点和单步调试,让我们意识到要想学好编程,就得多上机调试。一个星期时间自己用VC+实现了进制转换问题,收获很大同时在编写代码过程中也出现了很多的问题,最大的问题就是

6、 对程序设计框架结构的不了解,在实现代码与功能的连接时经常会出现各种不同的错误,在 实现一些功能时系统常常会报错,许多错误不知从哪修改。课程设计中,回顾了很多以前的 东西,收获很大。(4) 每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个体学习到整 体把握的跳跃,对新知识的汲取,更是把课本的知识应用到实际中,让我们了解了我们的学 习有什么用,能够解决什么样的问题,增加了自信和学习的动力。总之,我们收获匪浅首先由衷感谢老师提供这样一个锻炼自己的机会,感受到学来的知 识不只是用来完成试卷的。一向惯于独立思考的自己学会了积极的同同学、朋友交流,取长 补短,共同进步。课程设计使自己发

7、现考试并不是最重要,最重要的是能运用所学的知识。 在整个课程设计的学习过程中,不再是用学到的知识解题,而是在实际运用时遇到什么学什 么,重在把知识应用于实际。五、附录代码框架/ 实现 116 进制之间的相互转化(数组方法)/ 实现 116 进制之间的相互转化(数组方法)#include#include/#include#define N 100#define max_num 10int y,n,s;int m,r,x;void ten_else(int g,int h) /十进制数转换为其他进制数int cN,mod;int i=0,j;while(g!=0)mod = g % h;g = g

8、/h;ci = mod;i+;for(j=i-1;j=0;j-)switch(cj)case 10: coutA; break;case 11: coutB; break;case 12: coutC; break;case 13: coutD; break;case 14: coutE; break;case 15: coutF; break;default: cout=0;j-)if(cj = 9) coutcj;elseprintf(%c,(A+(cj-10); /cout(A+(cj-9); */void main()coutm;if(m10) /29进制转换成 10 进制存储十进制数

9、,j表示输入m进制数的位数。char smax_num; int k,z=0,j=0;/z for(int i=0;imax_num;i+)si=u;cout请输入一个ms;for(i=1;imax_num;i+) if(si!=u) j+;k=j;/ 保存输入位数for(i=0;ij;i+) z=z+(si-0)*(pow(m,-k);cout转换后的10进制数MD为:zendl; coutr;cout 输出转换成 r 进制的结果 :;ten_else(z,r);coutendl;else if(m=11)/1116进制转换成 10进制char smax_num;int k,z=0,j=0;

10、/z 存储十进制数, j 表示输入 16 进制数的位数。 for(int i=0;imax_num;i+)si=u;cout请输入一个ms; for(i=1;imax_num;i+) if(si!=u) j+;k=j;/ 保存输入位数 for(i=0;i=A&si=a&si=0&si=9) z=z+(si-0)*(pow(m,-k);cout 转换后的 10 进制数为 :zendl;coutr;cout 输出转换成 r 进制的结果 :;ten_else(z,r);coutendl;else if(m=10)/十进制转换成其它进制int x;coutx;coutr;if(r=10)cout 输出

11、转换成 r 进制的结果 :;ten_else(x,r);coutendl;elsecout 输出转换成 r 进制的结果 :;ten_else(x,r);coutendl;/ 实现 116 进制之间的相互转化(堆栈方法)#include #include enum error_codesuccess,overflow,underflow;const maxlen=100;int a,n,h;class stackpublic:stack();bool empty()const;bool full()const;error_code get_top(int &x)const;error_code

12、push(int x);error_code pop();int seesize()return count;private:int count;int datamaxlen;/ 初始化链栈stack:stack()count = 0;bool stack:empty()const /if(count = 0) return true;return false;error_code stack:get_top(int &x)const if ( empty() ) return underflow; elsex = datacount - 1; return success;error_cod

13、e stack:push(int x) /if( full() ) return underflow; datacount = x;count +;return success;error_code stack:pop() /if ( empty() ) return underflow; count -;return success;bool stack:full()constif( count = maxlen ) return true; return false;void ten_else(int g,int h) /int a,x;判断栈是否为空/ 取栈顶元素入栈出栈十进制数 g 转

14、换为其他进制 (h 进制 )数int mod; stack s; mod = g % h; if(mod9) a=mod+55;if(a=65) switch(a - 55) case 10: coutA; break; case 11: coutB; break; case 12: coutC; break; case 13: coutD; break;case 14: coutE; break;case 15: cout0) ten_else(g,h);while(!s.empty()s.get_top(x); s.pop(); coutx;int main()int m,a,z,sum;int i = 1;int j = 0;sum=0;stack s;coutm;cout请输入mx;cout10 进制数 MD即为:xendl;couth;ten_else(x,h);coutendl;else if(mx;while(x!=0)a = x % 10;x = x/10;s.push(a);while(!s.empty()s.get_top(z);sum = sum + z*pow(m,s.seesize()-1); s.pop();cout 转换的 10 进制数为

温馨提示

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

评论

0/150

提交评论