熊伟课程设计报告_第1页
熊伟课程设计报告_第2页
熊伟课程设计报告_第3页
熊伟课程设计报告_第4页
熊伟课程设计报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件技术基础课程设计学校:沈阳航空航天大学姓名:熊伟班级:学号:331 设计目的数据结构课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:n 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;n 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;n 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2. 设计

2、内容和要求内容任意给定一个M进制的数x,转换为其它任意进制的数据。基本要求、对给字一个M进制的数据x,求出此数x的10进制值(用MD表示);、实现对x向任意的一个非M进制的数的转换;核心问题: 将一个任意数的进制进行转换数据模型(逻辑结构): 栈的应用、数组的应用3本设计所采用的数据结构数据结构、用数组实现该问题:使用简单一维数组int aN,int bN, int cN。、用栈实现该问题:数据类型定义如下:typedef struct int *base; int *top; int stacksize;SqStack; 输入数据: 一个M进制的数x输出数据: 其它任意进制的数据*4功能模块

3、详细设计4.1 详细设计思想算法思想、用数组实现该问题:DtoM()函数和MtoD()函数是实现该问题的主要函数。DtoM()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用DtoM()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而MtoD()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第、位并分别乘以M的、次方,将得到的次方相加便得到对应的十进制数,再调用DtoM()函数

4、将其转换为非M进制的数。、用栈实现该问题:同样是利用DtoM()和MtoD()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。模块划分、用数组实现该问题: i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为; DtoM(int g,int h)是实现十进制数转换为M进制数的函数;MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(

5、int g,int h)实现向非十六进制数的转换;void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。、用栈实现该问题:SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;SqStack S是指定义栈S;DtoM(int a,int b)的功能是将十进制数转换成M进制的函数;MtoD()的功能是M进制转换为十

6、进制的函数;void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用DtoM()函数和MtoD()函数,而且实现M进制数向任意非M进制数的转换。流程图数组流程图开始执行main函数输入需转换进制的数字(2or8or10or16)switch()选择功能选择操作编号2.退出 exit(0)1进入转换系统m=16m=2|m=8m=10栈的流程图MtoD()HtoD()输入十进制数DtoM()输出结果输出结果输出结果开始执行main函数switch()选择功能选择操作编号2.退出 exit(0)1进入转换系统InitStack()构造空栈输入需转换进制的数字(

7、2or8or10or16)m=2|m=8|m=16m=10输入一个十进制数DtoM()DtoM()输出结果销毁栈MtoD()4.2 核心代码源程序有两个,shuzu.cpp是用数组实现该问题的程序,而stack.cpp是用栈实现该问题的程序:文件shuzu.cpp#include#include#include#include#define N 1000/ 以下为DtoM(int g,int h)是实现十进制数转换为M进制数的函数,DtoM(int g,int h)int cN;int i=0;int j;int reminder;reminder=g%h;g=g/h;if(reminder9

8、)ci=reminder+55;i+;elseci=reminder;i+;if(g0)DtoM(g,h);for(j=i-1;j=0;j-)if(cj=65)printf(%c,cj);elseprintf(%d,cj);/以下MtoD()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换MtoD(int e) /二进制和八进制数转换为十进制数,并这转换为其他进制数int n,i,y=0,j,s;int aN; printf(请输入%d进制位数:,e);scanf(%d,&n);j=0;printf(请输入%d进制

9、的每位并使每位用空格隔开:,e);for(i=n-1;i=0;i-) scanf(%d,&ai);for(i=0;in;i+)y+=(int)pow(e,j)*ai; /强制类型转换,以免造成数据丢失j+;printf(所得的10进制的结果:%d ,y); printf(n需要转换的进制M:);scanf(%d,&s);printf(请输出转换成%d进制的结果:,s);DtoM(y,s);return 0;/以下为HtoD(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换HtoD(int f) /十六进制数转换为十进制数,并

10、转换为其他进制数int n,j=0,y=0,i,s;int bN;printf(请输入%d进制位数:,f);scanf(%d,&n);printf(请输入%d进制的每位并使每位用空格隔开:,f);for(i=0;i=0;i-)y+=(int)pow(f,j)*bi; /强制类型转换,以免造成数据丢失 j+;printf(请输出所得的10进制的结果: );printf(%d,y);printf(n需要转换的进制M:);scanf(%d,&s);printf(请输出转换成%d进制的结果:,s);DtoM(y,s);return 0;/ void main()是主函数,功能是给出测试的数据,并在特定

11、条件下调用D2M()函数和M2D()函数void main()int m,r,x,t; for(;) printf(tt* * * * * * - welcome ! - * * * * * * n); printf(tt 数制转换系统 n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt* 1. 进入数制转换系统 *n); printf(tt* 2. 退出该系统

12、 *n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt 请选择(12):); loop:scanf(%d,&t); switch(t) case 1:printf(请给定一个需转换的进制M(2 or 8 or 10 or 16):);scanf(%d,&m);if(m=2|m=8) /二进制和八进制转换成十进制MtoD(m);else if(m=16) /十六进制转换成十进制HtoD(m);else if(m=10) /十进制转换成其它进制printf(请输入一个%d进制数:,m);scanf(%d,&

13、x);printf(请输入需要转换成的进制M(2 or 8 or 16):);scanf(%d,&r);printf(请输出转换成%d进制的结果:,r);DtoM(x,r);printf(n);break; case 2: exit(0); default: printf(输入有误,请重新选择:); goto loop; printf(n);文件stack.cpp#include#include#include#include#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 /存储空间分配增量int e,m,x,s,

14、t; /x为要转换的十进制数,e 为临时用的的int型变量int r,y,i,n;typedef struct int *base; /栈底int *top; /栈顶int stacksize; /栈容量SqStack;/ SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量/一下为int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;int InitStack(SqStack &S) /构造一个空栈S.base=

15、(int *)malloc(STACK_INIT_SIZE *sizeof(int);if(!S.base) exit(0); /存储空间失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;int GetTop(SqStack S, int &e) /若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if(S.top=S.base) return 1;e=*(S.top-1);return 0;int Push(SqStack &S , int e) /插入元素e为新的栈顶元素if(S.top-S.base=S.stacksize) /

16、栈满,追加存储空间S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int);if(!S.base) return 1 ; /存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return 0;int Pop(SqStack &S, int &e) /若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1if(S.top=S.base) return 1;e=*-S.top;return 0;int StackEmpt

17、y(SqStack S) /若栈空,则返回1,否则返回0if(S.top=S.base)return 1;return 0 ;int DestroyStack(SqStack &S) /销毁栈S,栈S不再存在free(S.base);S.top=NULL; /防止程序后面不小心使用了它S.base=S.top;return 0 ;/以下 SqStack S是指定义栈SSqStack S; /定义栈S/ 下面的D2M(int a,int b)的功能是将十进制数转换成M进制的函数DtoM(int a,int b) /十进制转换成其他进制的函数DtoM()while(a)r=a%b;if(r9)r=

18、r+55;Push(S,r); /压入栈a/=b; /转换成M进制printf(该数转换成%d进制的结果:,b);while(!StackEmpty(S)Pop(S,e); /弹出栈if(e=65)printf(%c,e);elseprintf(%d,e);return 0;/ 下面是M2D(),它的功能是M进制转换为十进制的函数MtoD() /其他进制转换为十进制的函数MtoD() char c1000;printf(请输入需要转换的数的位数:);scanf(%d,&n);printf(请输入需要转换的数的每位并用空格隔开:);for(i=0;in;i+)scanf(%x,&ci);Push

19、(S,ci); i=0;while(!StackEmpty(S)Pop(S,e);y+=(int)pow(m,i)*e;i+;printf(转换成10进制的结果是:);printf(%d,y);return 0;/void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换void main() int t; for(;) printf(tt* * * * * * - welcome ! - * * * * * * n); printf(tt 数制转换系统 n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt* 1. 进入数制转换系统 *n); printf(t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论