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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》

课程设计报告书

题目:数制转换

系别:计算机科学与应用系学号:

学生姓名:

指导教师:

完成日期: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

#define N 1000

int i,j,y,n,s;

int m,r,reminder;

int x; //全局变量默认初始化为0,不必再赋0了D2M(int g,int h) //十进制数转换为其他进制数

{

int c[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]);

return 0;

}

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

{

int a[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);

return 0;

}

H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数

{

int b[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);

return 0;

}

void main()

{

printf("请给定一个需转换的进制M(2or8or10or16):"); scanf("%d",&m);

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

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

H2D(m);

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

{

printf("请输入一个%d进制数:",m);

scanf("%d",&x);

printf("请输入需要转换成的进制M(2or8or16):");

scanf("%d",&r);

printf("请输出转换成%d进制的结果:",r);

相关文档
最新文档