数制转换问题(完整)

上传人:m**** 文档编号:512379767 上传时间:2023-12-27 格式:DOC 页数:19 大小:171KB
返回 下载 相关 举报
数制转换问题(完整)_第1页
第1页 / 共19页
数制转换问题(完整)_第2页
第2页 / 共19页
数制转换问题(完整)_第3页
第3页 / 共19页
数制转换问题(完整)_第4页
第4页 / 共19页
数制转换问题(完整)_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《数制转换问题(完整)》由会员分享,可在线阅读,更多相关《数制转换问题(完整)(19页珍藏版)》请在金锄头文库上搜索。

1、数据结构课程设计题 目 名 称: 数 制 转 换 问 题 课 程 名 称: 数 据 结 构 学 生 姓 名: 学 号: 学 院 名 称: 指 导 教 师: 目 录一需求分析二概要设计三详细设计四调试测试五总结一需求分析 应用环境设定: 生活中我们需要将M进制的数转换为我们所需要的进制,从键盘任意输入一个M进制的数,对其进行转换成其他三种进制的数,然后再从电脑中显示出来,最终得到我们的结果。 用户界面:命令行界面,根据自己的要求,对界面的提示进行操作,正确输入我们需要的数据。输入方式:首先输入将转换的进制数,回车确认;然后输入确定的数据,回车确认;接着选择要转换为的进制数,回车确认。输出方式:界

2、面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。数据储存方式:全部在内存存放,不使用硬盘上的文件或其他数据源,程序执行过程中和结束后不保存数据。程序功能:1.根据界面提示输入M进制数据。 2.对任意M进制数据实行非M进制的转换。二概要设计在此说明数据结构设计和关键的算法设计思想1. 用数组实现该问题D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入

3、一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。而M2D()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第、位并分别乘以M的、次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为; D2M(int g,int h)是实现十进制数转换为M进制数的函数;M2D(int e)是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;H2

4、D(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换;void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。使用简单一维数组int aN,int bN, int cN。2. 用栈实现该问题 同样是利用D2M()和M2D()两个函数实现。两个函数的思想同利用数组实现时相同。只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;int InitStack(SqStack &

5、S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;SqStack S是指定义栈S;D2M(int a,int b)的功能是将十进制数转换成M进制的函数;M2D()的功能是M进制转换为十进制的函数;void main()是主函数。其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换。数据类型定义如下:typedef struct int *base; 栈底int *top; 栈顶int stacksize;栈容量S

6、qStack;int InitStack(SqStack &S)构造一个个空栈int GetTop(SqStack S, int &e) 若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1int Push(SqStack &S , int e) 插入元素e为新的栈顶元素int Pop(SqStack &S, int &e) 若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1。1.程序流程图开始栈数组输入需转换的位数输入需转换的数的进制N 若N!=10 若N=10输入需转换的数输出结果输入将转换的进制数2.程序源代码A用数组实现(文件名shuzu.cpp)#include#i

7、nclude#define N 1000int i,j,y,n,s;int m,r,reminder;int x; /全局变量默认初始化为0,不必再赋0了D2M(int g,int h) /十进制数转换为其他进制数int cN;i=0;reminder=g%h;g=g/h;if(reminder9)ci=reminder+55;i+; elseci=reminder;i+;if(g0)D2M(g,h);for(j=i-1;j=0;j-)if(cj=65)printf(%c,cj);elseprintf(%d,cj);return 0;M2D(int e) /二进制和八进制数转换为十进制数,并这

8、转换为其他进制数int aN; printf(请输入%d进制位数:,m);scanf(%d,&n);printf(请输入%d进制的每位并使每位用空格隔开:,m);for(i=0;i=0;i-)y+=(int)pow(e,j)*ai; /强制类型转换,以免造成数据丢失j+; printf(需要转换的进制M:);scanf(%d,&s);printf(请输出转换成%d进制的结果:,s);D2M(y,s);return 0;H2D(int f) /十六进制数转换为十进制数,并转换为其他进制数int bN;printf(请输入%d进制位数:,m);scanf(%d,&n);printf(请输入%d进制

9、的每位并使每位用空格隔开:,m);for(i=0;i=0;i-)y+=(int)pow(f,j)*bi; /强制类型转换,以免造成数据丢失 j+;printf(需要转换的进制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) /十进制转换成其它进制pri

10、ntf(请输入一个%d进制数:,m);scanf(%d,&x);printf(请输入需要转换成的进制M(2or8or16):);scanf(%d,&r);printf(请输出转换成%d进制的结果:,r);D2M(x,r);printf(n);B用栈实现(文件名zhan.cpp)#include#include#include#include#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 /存储空间分配增量int e,m,x,s,t; /x为要转换的十进制数,e 为临时用的的int型变量int r,y,i,n;typ

11、edef struct int *base; /栈底int *top; /栈顶int stacksize; /栈容量SqStack;int InitStack(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;return 0;int GetTop(SqStack S, int &e) /若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1if(S.top=S.bas

12、e) return 1;e=*(S.top-1);return 0;int Push(SqStack &S , int e) /插入元素e为新的栈顶元素if(S.top-S.base=S.stacksize) /栈满,追加存储空间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;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号