数制转换数据结构课程设计报告.docx

上传人:b****5 文档编号:28003965 上传时间:2023-07-07 格式:DOCX 页数:18 大小:302.25KB
下载 相关 举报
数制转换数据结构课程设计报告.docx_第1页
第1页 / 共18页
数制转换数据结构课程设计报告.docx_第2页
第2页 / 共18页
数制转换数据结构课程设计报告.docx_第3页
第3页 / 共18页
数制转换数据结构课程设计报告.docx_第4页
第4页 / 共18页
数制转换数据结构课程设计报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数制转换数据结构课程设计报告.docx

《数制转换数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数制转换数据结构课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。

数制转换数据结构课程设计报告.docx

数制转换数据结构课程设计报告

《数据结构》

课程设计报告书

 

题目:

数制转换

系别:

计算机科学与应用系

学号:

学生姓名:

指导教师:

完成日期:

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

}

}

 

指导教师评语:

 

程序成绩:

报告成绩:

综合成绩:

指导教师姓名:

批改日期:

年月日

 

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

当前位置:首页 > 成人教育 > 成考

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

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