数据结构课程设计数制转换.docx
- 文档编号:6116636
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:12
- 大小:30.17KB
数据结构课程设计数制转换.docx
《数据结构课程设计数制转换.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计数制转换.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构课程设计数制转换
1前言
设计背景和意义
数据结构简介
数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。
数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。
它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。
在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
选择算法的原因
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
设计的原理和内容
设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。
本软件采用C语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。
操作简单,界面清晰,易于为用户所接受。
2正文
设计的目的和意义
我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。
当代社会学要大学培养出理论扎实,动手实践能力强的大学生。
所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。
为后继课程的学习打下坚实的基础。
通过本次数据结构课程设计,我们基本上掌握了课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的帮助和提高,加深了我们对数据结构的理解,,为今后的学习打下了坚实的基础。
同时也提高了我们对于编程这方面的能力。
目标和总体方案
本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方案:
程序的设计
第一步:
查阅有关数据结构数制转换操作的资料,用半天的时间。
第二步:
设计这个项目的整体架构和算法。
用一到两天的时间。
第三步:
使用C语言程序设计程序语言进行算法的描述。
两天的时间。
程序的调试
进行程序的调试。
用一天。
最后,我在完整的整理一遍,完成课设。
设计方法和内容
模块划分
用数组实现该问题
(1)i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;
(2)D2M(intg,inth)是实现十进制数转换为M进制数的函数;
(3)M2D()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(intg,inth)实现向非M进制数的转换;
(4)H2D(intf)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(intg,inth)实现向非十六进制数的转换;
(5)voidmain()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。
用栈实现该问题
(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进制数的换。
主要程序模块
(1):
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;
}
自定义函数D2M用于在用数组实现该问题的程序中十进制数转换为其他进制数
(2):
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]; 据结构(C语言版).清华大学出版社,2006年 [2]李春葆,曾慧,张植民编著.数据结构程序设计题典.清华大学出版社,2002年 [3]郭翠英编著.C语言课程设计案例精编.中国水利水电出版社,2004年 [4]谭浩强编著.C程序设计.清华大学出版社,2005年 [5]许卓群,张乃孝,杨冬青,唐世渭编著.《数据结构》.高等教育出版社,1988年 [6]晋良颍编著.《数据结构》.人民邮电出版社,2002年 附录 用数组实现: #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"); } 用栈实现: #include<> #include<> #include<> #include<> #defineSTACK_INIT_SIZE100//存储空间初始分配量 #defineSTACKINCREMENT10//存储空间分配增量 inte,m,x,s,t;//x为要转换的十进制数,e为临时用的的int型变量 intr,y,i,n; typedefstruct{ int*base;//栈底 int*top;//栈顶 intstacksize;//栈容量 }SqStack; intInitStack(SqStack&S){//构造一个空栈 =(int*)malloc(STACK_INIT_SIZE*sizeof(int)); if(! exit(0);//存储空间失败 =; =STACK_INIT_SIZE; return0; } intGetTop(SqStackS,int&e){//若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 if==return1; e=*; return0; } intPush(SqStack&S,inte){//插入元素e为新的栈顶元素 if//栈满,追加存储空间 =(int*)realloc, +STACKINCREMENT)*sizeof(int)); if(! return1;//存储分配失败 =+; +=STACKINCREMENT; } *++=e; return0; } intPop(SqStack&S,int&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1 if==return1; e=*; return0; } intStackEmpty(SqStackS){//若栈空,则返回1,否则返回0 if== return1; return0; } intDestroyStack(SqStack&S){//销毁栈S,栈S不再存在 free; =NULL;//防止程序后面不小心使用了它 =; return0; } SqStackS;//定义栈S D2M(inta,intb)//十进制转换成其他进制的函数D2M() { 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); } return0; } M2D()//其他进制转换为十进制的函数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("请输入需要转换的进制M(2or8or10or16): "); 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);//销毁栈S,栈S不再存在 }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 数制 转换