(完整word版)数制转换数据结构课程设计(word文档良心出品)_第1页
(完整word版)数制转换数据结构课程设计(word文档良心出品)_第2页
(完整word版)数制转换数据结构课程设计(word文档良心出品)_第3页
(完整word版)数制转换数据结构课程设计(word文档良心出品)_第4页
(完整word版)数制转换数据结构课程设计(word文档良心出品)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构 课程设计报告书 题 目数制转换 系 另比计算机科学与应用系 学 号: 学生姓名: 指导教师: 完成日期: 2013 6 1 i 数制转换 1. 需求分析 任意给定一个 M进制的数x ,实现如下要求 1) 求出此数x的10进制值(用MD表示) 2) 实现对x向任意的一个非M进制的数的转换。 3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决) 2. 概要设计 程序流程可以用以下流程图来刻画: B用栈实现 A用数组实现 3. 详细设计 A用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其 他进制的函数,

2、它是将输入的十进制数 x首先对需要转换的进制 M取余,然后在对其取整, 接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数 依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是 实现其他进制 M转换为十进制,并将其转换为非 M进制。M进制转十进制则是从该 M进 制数的最后一位开始运算, 依次列为第0、1、2、.N位并分别乘以 M的0、1、2、.N 次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非 M进制 的数。 B.用栈实现 栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。 4.

3、调试分析 (1) 构造栈的方法通过查阅书籍知道了。 (2) 数组的递归调用查阅相关书籍了解了。 (3) 为了让界面表达更清晰,多次调试完善了界面。 5. 测试结果 下面是我的测试函数及运行结果: A.数组测试结果 18 回 百:新起文禅無.Debug廖制转換数氢exh r8D O 2 2斧 M弄 和5甬结til 进:4进的on C 團换16y 陰義ke 一一霍an _/ 刖 S ,二-4.TT4,rr 丄# E 青青青青咗 r W擁文件無.氐buy做制转換数氢exe r r 4 D o 1 2 2 1 c : M M头 制E制制 进:7进阳 刃 IM 需10蔦ke 一一韋an _1 人 F 4

4、ijgj|g青请pp 賣 B栈实现测试结果 3 i 2S: 择玄 :选选请 进进亠: 制八二十选 进一.奪fr WHS 诜 W,山?fETfF誹 In lhi进併 _ TT 面一一 冒習g 同果果果果果 FlD _u _u D nu -司女-PI/女女女 R 9 八圣 y4J 1_ !%起请 豐舜 聲进八择 制八二十选 进为为諮思 的 选 IF 畧进进全岀 誓習SU 一想 囲果果果果果 - u. u. D- D- 诵女-pc女女女 2 n=8=23 10111 请按任意键继续 3 :选选* S进八择 制八二十选 进药力“詰S 的扯 專进进全岀 - - nn-lfl 你退 逆lsFEhEFsT

5、n D n D D 诵女-pc女女H:x 3 nC=B=23 1100111111 请按任意键继续. 6. 总结 通过数据结构课程设计,我了解到数据结构是计算机科学中一门综合性的专业基础 课。这次的课程设计使我对数组及栈有了初步的认识,虽然课程设计的不完善,但是在设计 过程中我受益匪浅, 通过查资料、网上搜索例子, 让我学到了很多以前不知道的东西,提高 我的分析和解决问题的能力,进一部掌握了应用系统设计的方法和不步骤,也让我意识到 自己所掌握的实在是太少了,只靠课本知识是不够的, 应该多多上机调试, 这样才能提高自 己。 7. 附源程序 A.数组实现 #include #include #de

6、fine N 1000 int i,j,y,n,s; int m,r,reminder; int x; /全局变量默认初始化为 0,不必再赋0 了 D2M(int g,int h) int cN; i=0; reminder=g%h; g=g/h; if(reminder9) ci=reminder+55; i+; else ci=reminder; i+; if(g0) D2M(g,h); for(j=i-1;j=0;j-) if(cj=65) printf(%c,cj); /十进制数转换为其他进制数 else printf(%d,cj); return 0; M2D(int e) / 二进

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

8、f)/十六进制数转换为十进制数, 并转换为其 他进制数 int bN; printf( 请输入 %d 进制位数 :,m); scanf(%d, printf( 请输入 %d 进制的每位并使每位用空格隔开 :,m); for(i=0;i=0;i-) y+=(int)pow(f,j)*bi;/ 强制类型转换,以免造成数据丢 失 j+; printf( 请输出所得的 10 进制的结果 : ); printf(%d,y); printf(n 需要转换的进制 M:); scanf(%d, printf( 请输出转换成 %d 进制的结果 :,s); D2M(y,s); return 0; void mai

9、n() printf( 请给定一个需转换的进制 M(2or8or10or16):); scanf(%d, if(m=2|m=8) /二进制和八进制转换成十进制 M2D(m); else if(m=16) /十六进制转换成十进制 H2D(m); else if(m=10) /十进制转换成其它进制 printf( 请输入一个 %d 进制数 :,m); scanf(%d, printf( 请输入需要转换成的进制 M(2or8or16):); scanf(%d, printf( 请输出转换成 %d 进制的结果 :,r); D2M(x,r); printf(n); B. 栈实现 #include std

10、io.h #include string.h #include math.h #include limits.h #include stdlib.h #include malloc.h #define TRUE 1 #define OK 1 #define FALSE 0 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; typedef int SElement; #define STACK_INIT_SIZE 10 #define STACKINCREMENT 2 typedef struct SqStack SElement

11、 *base ; SElement *top ; int stacksize ; SqStack; int InitStack (SqStack *S) * sizeof (*S).base = (SElement *)malloc(STACK_INIT_SIZE (SElement) ; if (!(*S).base) exit (OVERFLOW); S-top=S-base; S-stacksize= STACK_INIT_SIZE; return OK; int DestroyStack (SqStack *S) free (S-base); S-base = NULL; S-top

12、= NULL; S-stacksize = 0; return OK; int ClearStack(SqStack *S) S-top = S-base; return OK; int StackEmpty(SqStack S)判断 sqstack 是否为空 if (S.top = S.base ) return TRUE; else return FALSE; int StackLength (SqStack S)/返回s的元素个数,即栈的长度 return S.top-S.base ; int GetTop(SqStack S,int *e)若栈不为空,用e返回s的栈顶元素, 返回 ok

13、 if (S.top S.base ) *e=*(S.top-1); return OK; else return ERROR; int Push(SqStack *S,int e)插入元素e为新的栈顶元素 if (S-top - S-base = S-stacksize) S-base = (SElement * )realloc (*S).base,(*S).stacksize + STACKINCREMENT * sizeof (SElement); if (!S-base ) exit (OVERFLOW); S-top = S-base + S-stacksize; S-stacks

14、ize += STACKINCREMENT; *(S-top) = e; S-top +; return OK; int Pop(SqStack *S,int *e) /*若栈不空,则删除S的栈顶元素,用e返回其值,并返回0K; 否则返回 ERROR */ if(*S).top=(*S).base) return ERR0R; *e=*-(*S).top; return OK; int StackTraverse (SqStack S ,int (*visit)(int )/ while (S.top S.base ) visit (*S.base + ); printf (n); retur

15、n OK; void conversion8(SqStack s) unsigned n; int e; InitStack (/ 初始化栈 printf (n(=0)=); scanf (%u, while (n)/ 当 n 不为 0 Push ( n=n/8; while (!StackEmpty(s)/ 当栈不为空 :(a.P%J uud :他呦dod 卓华立辭乐(s)eduimpE)si) !3/u=u us$) qsnj 0 u 乐 (u)e|!i|M jueos !(11=(O=|oejsi!U| 3! !u pauBisun (S ”OE)SbS)乙UOISJ9AUO3 piOA

16、 (,u J HU!d :(a.P%J uud dod 制Eaiq:(3P%HU!d4=ej aseo !|eajq!(ai11p%11)4;uud!o=e:O eseo (a)qoiMS dod 卓华立辭乐(s)eduimpE)si) eiM !3/u=u us$) qsnj 0 u 乐 (u)e|!i|M jueos !(11=(O=|oejsi!U| !a ui !p ueqo !u pauBisun (s |3esbs)9puoisuaAuoo piOA (,u J Buud case 2:e=2;printf(%d,e);break; case 3:e=3;printf(%d,e);

17、break; case 4:e=4;printf(%d,e);break; case 5:e=5;printf(%d,e);break; case 6:e=6;printf(%d,e);break; case 7:e=7;printf(%d,e);break; case 8:e=8;printf(%d,e);break; case 9:e=9;printf(%d,e);break; case 10:d=a;printf(%c,d);break; case 11:d=b;printf(%c,d);break; case 12:d=c;printf(%c,d);break; case 13:d=d

18、;printf(%c,d);break; case 14:d=e;printf(%c,d);break; case 15:d=f;printf(%c,d);break; printf (%d,e); printf (n); /选择 int choose() int d; 1n); 2n); 3n); printf( 请选择你要进行的进制的转换: n printf( 如果是十进制转换为八进制请选择 printf( 如果是十进制转换为二进制请选择 printf( 如果是十进制转换为十六进制请选择 printf( 如果您想全部转换请选择 9n); printf( 如果想退出请选择 0n); printf(n); scanf(%d, return d; void main() int f=0; SqSta

温馨提示

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

评论

0/150

提交评论