数据结构课程设计数制转换
- 格式:doc
- 大小:82.50 KB
- 文档页数:15
.
;.
目录
1前言 ............................................................ 2
1.1设计背景和意义 ............................................. 2
1.1.1数据结构简介 ............................................. 2
1.1.2选择算法的原因 ........................................ 2
1.2设计的原理和内容 ........................................... 2
2正文 ............................................................ 2
2.1 设计的目的和意义 ........................................... 2
2.2 目标和总体方案 ............................................. 2
2.3 设计方法和内容 ............................................. 3
2.3.1模块划分 .............................................. 3
2.3.2主要程序模块 .......................................... 3
2.4 程序的设计思想和内容 ....................................... 6
2.4.1用数组实现该问题 ...................................... 6
2.4.2用栈实现该问题 ........................................ 6
2.5 设计创新和关键技术 ......................................... 6
2.6 程序调试 ................................................... 6
2.7程序流程图 ................................................. 7
2.8结论 ....................................................... 8
参考文献 .......................................................... 9
附录 ............................................................. 10
.
;. 1前言
1.1设计背景和意义
1.1.1数据结构简介
数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
1.1.2选择算法的原因
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
1.2设计的原理和内容
设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。本软件采用C语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。操作简单,界面清晰,易于为用户所接受。
2正文
2.1 设计的目的和意义
我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。当代社会学要大学培养出理论扎实,动手实践能力强的大学生。所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。为后继课程的学习打下坚实的基础。通过本次数据结构课程设计,我们基本上掌握了课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的帮助和提高,加深了我们对数据结构的理解,,为今后的学习打下了坚实的基础。同时也提高了我们对于编程这方面的能力。
2.2 目标和总体方案
本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方案: .
;. 程序的设计
第一步:查阅有关数据结构数制转换操作的资料,用半天的时间。
第二步:设计这个项目的整体架构和算法。用一到两天的时间。
第三步:使用C语言程序设计程序语言进行算法的描述。两天的时间。
程序的调试
进行程序的调试。用一天。
最后,我在完整的整理一遍,完成课设。
2.3 设计方法和内容
2.3.1模块划分
2.3.1.1用数组实现该问题
(1)i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;
(2)D2M(int g,int h)是实现十进制数转换为M进制数的函数;
(3)M2D()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;
(4)H2D(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int
g,int h)实现向非十六进制数的转换;
(5)void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。
2.3.1.2用栈实现该问题
(1)SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;
(2)int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;
(3)SqStack S是指定义栈S;
(4)D2M(int a,int b)的功能是将十进制数转换成M进制的函数;
(5)M2D()的功能是M进制转换为十进制的函数;
(6)void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向转任意非M进制数的换。
2.3.2主要程序模块
(1):
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;
}
自定义函数D2M用于在用数组实现该问题的程序中十进制数转换为其他进制数
(2):
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;
}
自定义函数M2D用于在用数组实现该问题的程序中二进制和八进制数转换为十进制数,并且转换为其他进制数
(3):
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;
}
自定义函数H2D用于在用数组实现该问题的程序中十六进制数转换为十进制数,并转换
为其他进制数
(4):
D2M(int a,int b)
{
while(a)
{
r=a%b;
if(r>9)
r=r+55;
Push(S,r); //压入栈
a/=b; //转换成M进制
}
printf("该数转换成%d进制的结果:",b);
while(!StackEmpty(S))
{
Pop(S,e); //弹出栈
if(e>=65)
printf("%c",e);
else
printf("%d",e);
}
return 0;
}
自定义函数D2M用于在用栈实现该问题的程序中十进制数转换成其他进制数
(5):
M2D() 其他进制数转换为十进制数
{