数制转换数据结构课程设计Word文件下载.doc

上传人:b****2 文档编号:14180606 上传时间:2022-10-19 格式:DOC 页数:22 大小:364KB
下载 相关 举报
数制转换数据结构课程设计Word文件下载.doc_第1页
第1页 / 共22页
数制转换数据结构课程设计Word文件下载.doc_第2页
第2页 / 共22页
数制转换数据结构课程设计Word文件下载.doc_第3页
第3页 / 共22页
数制转换数据结构课程设计Word文件下载.doc_第4页
第4页 / 共22页
数制转换数据结构课程设计Word文件下载.doc_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数制转换数据结构课程设计Word文件下载.doc

《数制转换数据结构课程设计Word文件下载.doc》由会员分享,可在线阅读,更多相关《数制转换数据结构课程设计Word文件下载.doc(22页珍藏版)》请在冰豆网上搜索。

数制转换数据结构课程设计Word文件下载.doc

构造数组

数制转换函数

输出结果

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<

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;

i++;

}

if(g>

0)

D2M(g,h);

for(j=i-1;

j>

=0;

j--)

if(c[j]>

=65)

printf("

%c"

c[j]);

else

%d"

return0;

}

M2D(inte)//二进制和八进制数转换为十进制数,并这转换为其他进制数

{

inta[N];

printf("

请输入%d进制位数:

"

m);

scanf("

&

n);

printf("

请输入%d进制的每位并使每位用空格隔开:

for(i=0;

i<

n;

i++)

scanf("

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];

scanf("

%x"

b[i]);

i--)

y+=(int)pow(f,j)*b[i];

//强制类型转换,以免造成数据丢失

j++;

voidmain()

请给定一个需转换的进制M(2or8or10or16):

m);

if(m==2||m==8)//二进制和八进制转换成十进制

M2D(m);

elseif(m==16)//十六进制转换成十进制

H2D(m);

elseif(m==10)//十进制转换成其它进制

{

printf("

请输入一个%d进制数:

scanf("

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);

S->

base=NULL;

top=NULL;

stacksize=0;

intClearStack(SqStack*S)

top=S->

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)

base=(SElement*)realloc((*S).base,((*S).stacksize+STACKINCREMENT*

sizeof(SElement)));

if(!

S->

base)

exit(OVERFLOW);

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;

returnOK;

intStackTraverse(SqStackS,int(*visit)(int))//

while(S.top>

visit(*S.base++);

printf("

voidconversion8(SqStacks)

{

unsignedn;

inte;

InitStack(&

//初始化栈

n(>

=0)="

scanf("

%u"

while(n)//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1