数制转换数据结构课程设计报告.docx
- 文档编号:25136462
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:59
- 大小:170.97KB
数制转换数据结构课程设计报告.docx
《数制转换数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数制转换数据结构课程设计报告.docx(59页珍藏版)》请在冰豆网上搜索。
数制转换数据结构课程设计报告
下载可编辑
《数据结构》
课程设计报告书
题目:
数制转换
系别:
计算机科学与应用系
学号:
学生姓名:
指导教师:
完成日期:
2013—6—1
.专业.整理.
下载可编辑
数制转换
1.需求分析
任意给定一个M进制的数x,实现如下要求
1)求出此数x的10进制值(用MD表示)
2)实现对x向任意的一个非M进制的数的转换。
3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解
决)。
2.概要设计
程序流程可以用以下流程图来刻画:
A用数组实现B用栈实现
开始
开始
构造数组
创建栈
数制转换函数制转换函
数数
输出结果
输出结果
.专业.整理.
下载可编辑
3.详细设计
A.用数组实现该问题
D2M()函数和M2D()函数是实现该问题的主要函数。
D2M()函数是实现十进制转换为
其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取
整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的
余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。
而M2D()函
数是实现其他进制M转换为十进制,并将其转换为非M进制。
M进制转十进制则是从该
M进制数的最后一位开始运算,依次列为第0、1、2、..N位并分别乘以M的0、1、
2、..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为
非M进制的数。
B.用栈实现
栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。
4.调试分析
(1)构造栈的方法通过查阅书籍知道了。
(2)数组的递归调用查阅相关书籍了解了。
(3)为了让界面表达更清晰,多次调试完善了界面。
5.测试结果
下面是我的测试函数及运行结果:
A.数组测试结果
.专业.整理.
下载可编辑
.专业.整理.
下载可编辑
B栈实现测试结果
.专业.整理.
下载可编辑
.专业.整理.
下载可编辑
6.总结
.专业.整理.
下载可编辑
通过《数据结构》课程设计,我了解到数据结构是计算机科学中一门综合性的专业基础
课。
这次的课程设计使我对数组及栈有了初步的认识,虽然课程设计的不完善,但是在设
计过程中我受益匪浅,通过查资料、网上搜索例子,让我学到了很多以前不知道的东西,
提高我的分析和解决问题的能力,进一部掌握了应用系统设计的方法和不步骤,,也让我
意识到自己所掌握的实在是太少了,只靠课本知识是不够的,应该多多上机调试,这样才
能提高自己。
7.附源程序
A.数组实现
#include
#include
#defineN1000
inti,j,y,n,s;
intm,r,reminder;
intx;//全局变量默认初始化为0,不必再赋0了
D2M(intg,inth)//十进制数转换为其他进制数
{
intc[N];
i=0;
reminder=g%h;
g=g/h;
if(reminder>9)
{
.专业.整理.
下载可编辑
c[i]=reminder+55;
i++;
}
else
{
c[i]=reminder;
i++;
}
if(g>0)
D2M(g,h);
for(j=i-1;j>=0;j--)
if(c[j]>=65)
printf("%c",c[j]);
else
printf("%d",c[j]);
return0;
}
M2D(inte)//二进制和八进制数转换为十进制数,并这
转换为其他进制数
{
inta[N];
printf("请输入%d进制位数:
",m);
.专业.整理.
下载可编辑
scanf("%d",&n);
printf("请输入%d进制的每位并使每位用空格隔开:
",m);
for(i=0;i scanf("%d",&a[i]); for(i=n-1;i>=0;i--) { y+=(int)pow(e,j)*a[i];//强制类型转换,以免造成数据 丢失 j++; } printf("请输出所得的10进制的结果: "); printf("%d",y); printf("\n需要转换的进制M: "); scanf("%d",&s); printf("请输出转换成%d进制的结果: ",s); D2M(y,s); return0; } H2D(intf)//十六进制数转换为十进制数,并转换为 其他进制数 { intb[N]; .专业.整理. 下载可编辑 printf("请输入%d进制位数: ",m); scanf("%d",&n); printf("请输入%d进制的每位并使每位用空格隔开: ",m);for(i=0;i scanf("%x",&b[i]); for(i=n-1;i>=0;i--) { y+=(int)pow(f,j)*b[i];//强制类型转换,以免造成数 据丢失 j++; } printf("请输出所得的10进制的结果: "); printf("%d",y); printf("\n需要转换的进制M: "); scanf("%d",&s); printf("请输出转换成%d进制的结果: ",s); D2M(y,s); return0; } voidmain() { printf("请给定一个需转换的进制M(2or8or10or16): "); .专业.整理. 下载可编辑 scanf("%d",&m); if(m==2||m==8)//二进制和八进制转换成十进制 M2D(m); elseif(m==16)//十六进制转换成十进制 H2D(m); elseif(m==10)//十进制转换成其它进制 { printf("请输入一个%d进制数: ",m); scanf("%d",&x); printf("请输入需要转换成的进制M(2or8or16): "); scanf("%d",&r); printf("请输出转换成%d进制的结果: ",r); D2M(x,r); } printf("\n"); } B.栈实现 #include"stdio.h" #include"string.h" #include"math.h" #include"limits.h" #include"stdlib.h" .专业.整理. 下载可编辑 #include"malloc.h" #defineTRUE1 #defineOK1 #defineFALSE0 #defineERROR0 #defineINFEASIBLE-1 typedefintStatus; typedefintSElement; #defineSTACK_INIT_SIZE10 #defineSTACKINCREMENT2 typedefstructSqStack { SElement*base;SElement*top; intstacksize; }SqStack; intInitStack(SqStack*S) { (*S).base=(SElement*)malloc(STACK_INIT_SIZE*sizeof(SElement)); if(! (*S).base) exit(OVERFLOW); S->top=S->base; .专业.整理. 下载可编辑 S->stacksize=STACK_INIT_SIZE; returnOK; } intDestroyStack(SqStack*S) { free(S->base); S->base=NULL; S->top=NULL; S->stacksize=0; returnOK; } intClearStack(SqStack*S) { S->top=S->base; returnOK; } intStackEmpty(SqStackS)//判断sqstack是否为空 { if(S.top==S.base) returnTRUE; else returnFALSE; .专业.整理. 下载可编辑 } intStackLength(SqStackS)//返回s的元素个数,即栈的长度 { returnS.top-S.base; } intGetTop(SqStackS,int*e)//若栈不为空,用e返回s的栈顶 元素,返回ok { if(S.top>S.base) { *e=*(S.top-1); returnOK; } elsereturnERROR; } intPush(SqStack*S,inte)//插入元素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->stacksize+=STACKINCREMENT; } *(S->top)=e; S->top++; returnOK; } intPop(SqStack*S,int*e) {/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK; 否则返回ERROR*/ if((*S).top==(*S).base) returnERROR; *e=*--(*S).top; returnOK; } intStackTraverse(SqStackS,int(*visit)(int))// { while(S.top>S.base) visit(*S.base++); printf("\n"); .专业.整理. 下载可编辑 returnOK; } voidconversion8(SqStacks) { unsignedn; inte; InitStack(&s);//初始化栈 printf("n(>=0)="); scanf("%u",&n); while(n)//当n不为0 { Push(&s,n%8); n=n/8; } while(! StackEmpty(s))//当栈不为空 { Pop(&s,&e); printf("%d",e); } printf("\n"); } voidconversion2(SqStacks) .专业.整理. 下载可编辑 { unsignedn; inte; InitStack(&s);//初始化栈 printf("n(>=0)="); scanf("%u",&n); while(n)//当n不为0 { Push(&s,n%2); n=n/2; } while(! StackEmpty(s))//当栈不为空 { Pop(&s,&e); printf("%d",e); } printf("\n"); } voidconversion16(SqStacks) { unsignedn; chard; .专业.整理. 下载可编辑 inte;InitStack(&s);//初始化栈 printf("n(>=0)="); scanf("%u",&n); while(n)//当n不为0 { Push(&s,n%2); n=n/2; } while(! StackEmpty(s))//当栈不为空 { Pop(&s,&e); switch(e) { case0: e=0;printf("%d",e);break; case1: e=1;printf("%d",e);break; case2: e=2;printf("%d",e);break; case3: e=3;printf("%d",e);break; case4: e=4;printf("%d",e);break; case5: e=5;printf("%d",e);break; case6: e=6;printf("%d",e);break; case7: e=7;printf("%d",e);break; case8: e=8;printf("%d",e);break; .专业.整理. 下载可编辑 case9: e=9;printf("%d",e);break; case10: d='a';printf("%c",d);break; case11: d='b';printf("%c",d);break; case12: d='c';printf("%c",d);break; case13: d='d';printf("%c",d);break; case14: d='e';printf("%c",d);break; case15: d='f';printf("%c",d);break; } printf("%d",e); } printf("\n"); } //选择 intchoose() { intd; printf("请选择你要进行的进制的转换: \n"); printf("如果是十进制转换为八进制请选择1\n"); printf("如果是十进制转换为二进制请选择2\n"); printf("如果是十进制转换为十六进制请选择3\n"); printf("如果您想全部转换请选择9\n"); printf("如果想退出请选择0\n"); .专业.整理. 下载可编辑 printf("\n"); scanf("%d",&d); returnd; } voidmain() { intf=0; SqStacks; while(! f) { switch(choose()) { case1: conversion8(s);break; case2: conversion2(s);break; case3: conversion16(s);break; case9: conversion8(s); conversion2(s); conversion16(s); break; case0: f=-1; default: f=1; } .专业.整理. 下载可编辑 system("pause"); system("cls"); } } 指导教师评语: .专业.整理. 下载可编辑 程序成绩: 报告成绩: 综合成绩: 指导教师姓名: 批改日期: 年月日 .专业.整理.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数制 转换 数据结构 课程设计 报告