数制转换数据结构课程设计Word格式文档下载.docx
《数制转换数据结构课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数制转换数据结构课程设计Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
而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<
stdio.h>
math.h>
#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;
if(g>
0)
D2M(g,h);
for(j=i-1;
j>
=0;
j--)
if(c[j]>
=65)
printf("
%c"
c[j]);
%d"
return0;
}
M2D(inte)//二进制和八进制数转换为十进制数,并这转换为其他进制数
{
inta[N];
请输入%d进制位数:
"
m);
scanf("
&
n);
请输入%d进制的每位并使每位用空格隔开:
for(i=0;
i<
n;
i++)
a[i]);
for(i=n-1;
i>
i--)
y+=(int)pow(e,j)*a[i];
//强制类型转换,以免造成数据丢失
j++;
}
请输出所得的10进制的结果:
"
);
y);
\n需要转换的进制M:
s);
请输出转换成%d进制的结果:
s);
D2M(y,s);
H2D(intf)//十六进制数转换为十进制数,并转换为其他进制数
intb[N];
%x"
b[i]);
y+=(int)pow(f,j)*b[i];
voidmain()
请给定一个需转换的进制M(2or8or10or16):
m);
if(m==2||m==8)//二进制和八进制转换成十进制
M2D(m);
elseif(m==16)//十六进制转换成十进制
H2D(m);
elseif(m==10)//十进制转换成其它进制
{
请输入一个%d进制数:
x);
请输入需要转换成的进制M(2or8or16):
r);
r);
D2M(x,r);
\n"
}
B.栈实现
#include"
stdio.h"
#include"
string.h"
math.h"
limits.h"
stdlib.h"
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;
stacksize=STACK_INIT_SIZE;
returnOK;
intDestroyStack(SqStack*S)
free(S->
base);
base=NULL;
top=NULL;
stacksize=0;
intClearStack(SqStack*S)
top=S->
intStackEmpty(SqStackS)//判断sqstack是否为空
if(S.top==S.base)
returnTRUE;
returnFALSE;
intStackLength(SqStackS)//返回s的元素个数,即栈的长度
returnS.top-S.base;
intGetTop(SqStackS,int*e)//若栈不为空,用e返回s的栈顶元素,返回ok
if(S.top>
S.base)
*e=*(S.top-1);
elsereturnERROR;
intPush(SqStack*S,inte)//插入元素e为新的栈顶元素
if(S->
top-S->
base>
=S->
stacksize)
base=(SElement*)realloc((*S).base,((*S).stacksize+STACKINCREMENT*
sizeof(SElement)));
S->
base)
base+S->
stacksize;
stacksize+=STACKINCREMENT;
*(S->
top)=e;
top++;
intPop(SqStack*S,int*e)
{/*若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;
否则返回ERROR*/
if((*S).top==(*S).base)
returnERROR;
*e=*--(*S).top;
intStackTraverse(SqStackS,int(*visit)(int))//
while(S.top>
visit(*S.base++);
printf("
voidconversion8(SqStacks)
unsignedn;
inte;
InitStack(&
//初始化栈
n(>
=0)="
scanf("
%u"
while(n)//当n不为0
Push(&
s,n%8);
n=n/8;
while(!
StackEmpty(s))//当栈不为空
Pop(&
s,&
e);
e);
voidconversion2(SqStacks)
unsignedn;
s,n%2);
n=n/2;
voidconversion16(SqStacks)
chard;
switch(e)
case0:
e=0;
printf("
break;
case1:
e=1;
case2:
e=2;
case3:
e=3;
case4:
e=4;
case5:
e=5;
case6:
e=6;
case7:
e=7;
case8:
e=8;
case9:
e=9;
case10:
d='
a'
;
d);
case11:
b'
case12:
c'
case13:
d'
case14:
e'
case15:
f'
//选择
intchoose()
intd;
请选择你要进行的进制的转换:
如果是十进制转换为八进制请选择1\n"
如果是十进制转换为二进制请选择2\n"
如果是十进制转换为十六进制请选择3\n"
如果您想全部转换请选择9\n"
如果想退出请选择0\n"
d);
returnd;
intf=0;
SqStacks;
while(!
f)
switch(choose())
conversion8(s);
conversion2(s);
conversion16(s);
conversion2(s);
conversion16(s);
break;
f=-1;
default:
f=1;
system("
pause"
system("
cls"
指导教师评语:
程序成绩:
报告成绩:
综合成绩:
指导教师姓名:
批改日期:
年月日