数据结构课程设计 福建农林大学金山学院.docx
《数据结构课程设计 福建农林大学金山学院.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 福建农林大学金山学院.docx(10页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计 福建农林大学金山学院.docx](https://file1.bdocx.com/fileroot1/2023-2/4/4c59d0bb-8251-4045-9637-10a5c573296c/4c59d0bb-8251-4045-9637-10a5c573296c1.gif)
数据结构课程设计福建农林大学金山学院
福建农林大学金山学院
课程设计报告
课程名称:
算法与数据结构课程设计
课程设计题目:
数制转换
姓名:
陈华实
系:
信息与机电工程系
专业:
计算机科学与技术
年级:
2009
学号:
092231044
指导教师:
陈小娥
职称:
助教
2011年6月24日
福建农林大学金山学院课程设计结果评定
评语:
序号
评定标准
分值
评定结果
1
课程设计报告符合规范,条理清晰,重点突出
20%
2
程序实现设计方案,软件可靠性好
40%
3
课程设计有自己的收获、体会、感受,等等
15%
4
能够按照要求演示课程设计
15%
5
有一定的创新性,难易程度
10%
合计
成绩:
指导教师签字:
任务下达日期:
2010年月日
评定日期:
目录
1设计任务………………………………………………………………………1
2设计要求…………………………………………………………………1
3设计方案……………………………………………………………1
4设计内容……………………………………………………………1
5实验结果………………………………………………………………………2
6总结………………………………………………………………………………3
7附录………………………………………………………………………………3
数制转换
1.设计任务
主要利用c++语言设计开发一个数制转换器,至少具有如下功能:
输入一种数的数据及数制,输出这个数的其他数制表示,要求包括二、八、十和十六进制。
2.设计要求
1、培养学生应用面向对象程序设计设计方法及思想解决实际问题的能力。
2、培养学生掌握使用面向对象程序设计语言C++和面向对象开发平台VisualC++。
3、培养学生调查研究,查阅技术文献、资料、手册以及编写技术文献的能力。
本课程设计要实现的主要功能如下:
1、对给字一个M进制的数据x,求出此数x的10进制值(用MD表示);
2、实现对x向任意的一个非M进制的数的转换;
3、至少用两种方法实现上述要求(用栈解决,用数组解决,其它方法解决)。
3.设计方案
算法思想:
利用D2M()函数和M2D()函数是实现该问题的主要函数。
D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。
而M2D()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。
M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。
.
4.设计内容
模块分化
1、 SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;
2、 intInitStack(SqStack&S)到intDestroyStack(SqStack&S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;
3、 SqStackS是指定义栈S;
4、 D2M(inta,intb)的功能是将十进制数转换成M进制的函数;
5、M2D()的功能是M进制转换为十进制的函数;
6、 voidmain()是主函数。
其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换。
数据类型定义如下:
typedefstruct{
int*base;
int*top;
intstacksize;
}SqStack;
5.实验结果
十进制转换成二进制:
十进制转换成八进制:
十进制转换成十六进制:
二进制转换成十进制和八进制:
十六进制转换成十进制和八进制:
6.总结
通过这次课程设计,我对数据结构有了新的认识,我对C++语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,虽然在调试程序遇到了很多的困难,但是都一一去把它解决了。
从中也让我知道了要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。
因为我们学习知识就是为了实践。
而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。
参考文献
[1]马石安,魏文平编著,面向对象程序:
C++语言描述,北京:
清华大学出版社,2007
[2]李宽等编著,零基础学C++,北京:
机械工业出版社,2009.1
[2]宁正元等编著,算法与数据结构,北京:
清华大学出版社,2006.1
7.附录
#include
#include
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
inte,m,x,s,t;
intr,y,i,n;
typedefstruct{
int*base;
int*top;
intstacksize;
}SqStack;
intInitStack(SqStack&S){
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return0;
}
intGetTop(SqStackS,int&e){
if(S.top==S.base)return1;
e=*(S.top-1);
return0;
}
intPush(SqStack&S,inte){
if(S.top-S.base>=S.stacksize){
S.base=(int*)realloc(S.base,
(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!
S.base)return1;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return0;
}
intPop(SqStack&S,int&e){
if(S.top==S.base)return1;
e=*--S.top;
return0;
}
intStackEmpty(SqStackS){
if(S.top==S.base)
return1;
return0;
}
intDestroyStack(SqStack&S){
free(S.base);
S.top=NULL;
S.base=S.top;
return0;
}
SqStackS;
D2M(inta,intb)
{
while(a)
{
r=a%b;
if(r>9)
r=r+55;
Push(S,r);
a/=b;
}
printf("该数转换成%d进制的结果:
",b);
while(!
StackEmpty(S))
{
Pop(S,e);
if(e>=65)
printf("%c",e);
else
printf("%d",e);
}
return0;
}
M2D(){
charc[1000];
printf("请输入需要转换的数的位数:
");
scanf("%d",&n);
printf("请输入需要转换的数的每位并用空格隔开:
");
for(i=0;i{
scanf("%x",&c[i]);
Push(S,c[i]);
}
i=0;
while(!
StackEmpty(S))
{
Pop(S,e);
y+=(int)pow(m,i)*e;
i++;
}
printf("转换成10进制的结果是:
");
printf("%d",y);
return0;
}
voidmain()
{
InitStack(S);
printf("请输入需要转换的进制:
");
scanf("%d",&m);
if(m==10){
printf("请给定一个需要转换的10进制数:
");
scanf("%d",&x);
printf("请输入需要转换成的进制数:
");
scanf("%d",&t);
D2M(x,t);
}
if(m==2||m==8||m==16){
M2D();
printf("\n给定要转换成的进制M:
");
scanf("%d",&s);
D2M(y,s);
}
printf("\n");
DestroyStack(S);
}