数制转换问的题目_第1页
数制转换问的题目_第2页
数制转换问的题目_第3页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

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

6、底int *top; 栈顶int stacksize; 栈容量SqStack;int In itStack(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=10输出结果2.程序源代码A.用数组实现(文件名shuzu.cpp )#in

7、 clude<stdio.h>#in clude<math.h>#define N 1000int i,j,y,n,s;int m,r,re min der;int x;全局变量默认初始化为0,不必再赋0 了D2M(i nt g,i nt h)十进制数转换为其他进制数int cN;i=0;remin der=g%h;g=g/h;if(remi nder>9)ci=re min der+55;i+;elseci=re min der;i+;if(g>0)D2M(g,h);for(j=i-1;j>=0;j-)if(cj>=65)prin tf(&qu

8、ot;%c",cj);elseprin tf("%d",cj);return 0;M2D(int e)二进制和八进制数转换为十进制数,并这转换为其他进制数int aN;printf("请输入%d进制位数:",m);sca nf("%d",&n);printf("请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i <n ;i+)sea nf("%d",&ai);for(i 二n-1;i>=0;i-)y+=(int)pow(e,j)*ai;/强

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

10、ea nf("%x",&bi);for(i 二n-1;i>=0;i-)丢失y+=(i nt)pow(f,j)*bi;/强制类型转换,以免造成数据j+;printf("需要转换的进制 M:");sea nf("%d",&s);printf("请输出转换成%d进制的结果:",s);D2M(y,s);return 0;void mai n()printf("请给定一个需转换的进制M(2or8or10or16):");sca nf("%d",&m);if

11、(m=2|m=8)二进制和八进制转换成十进制M2D(m);else if(m=16)/十六进制转换成十进制H2D(m);else if(m=10)/十进制转换成其它进制printf("请输入一个%d进制数:",m);sca nf("%d",& x);printf("请输入需要转换成的进制M(2or8or16):");sca nf("%d",&r);printf("请输出转换成%d进制的结果:",r);D2M(x,r);prin tf("n");B.用栈实现(文

12、件名zhan.cpp)#i nclude<stdio.h>#i nclude<malloc.h>#i nclude<stdlib.h>#in clude<math.h>#define STACK_INIT_SIZE 100/存储空间初始分配量#define STACKINCREMENT 10/ 存储空间分配增量int e,m,x,s,t; /x为要转换的十进制数,e为临时用的的int型变量int r,y,i,n;typedef structint *base;栈底int *top;/ 栈顶int stacksize; /栈容量 SqStack;i

13、nt In itStack(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.base) retur n 1;e=*(S.top-1);return 0;int Push(SqStack &S

14、, int e)/插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize) / 栈满,追加存储空间 S.base=(i nt *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(i nt);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返回其值,并返回

15、0,否则返回1if(S.top=S.base) retur n 1;e=*-S.top;return 0;int StackEmpty(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;II定义栈 SD2M(int a,int b)II十进制转换成其他进制的函数D2M()while(a)r=a%

16、b;if(r>9)r二叶 55;Push(S,r); II 压入栈aI=b;II转换成M进制printf("该数转换成%d进制的结果:",b);while(!StackEmpty(S)Pop(S,e);弹出栈if(e>=65)prin tf("%c",e);elseprin tf("%d",e);return 0;M2D()M2D()/其他进制转换为十进制的函数char c1000;printf("请输入需要转换的数的位数:");sca nf("%d",&n);printf(

17、"请输入需要转换的数的每位并用空格隔开:");for(i=0;i <n ;i+)sca nf("%x",&ci);Push(S,ci);i=0;while(!StackEmpty(S)Pop(S,e);y+=(i nt)pow(m,i)*e;i+;void mai n()Ini tStack(S);/ 构造一个空栈printf("请输入需要转换的进制 M(2or8or10or16):");sca nf("%d",&m);if(m=10)/十进制转换成其他进制printf("请给定一个

18、需要转换的10进制数:");sca nf("%d",& x);printf("请输入需要转换成的进制数:");sca nf("%d",&t);D2M(x,t);if(m=2|m=8|m=16)/其他进制转换成十进制,且其他任意进制的相互转换M2D();printf("给定要转换成的进制 M:");sea nf("%d", &s);D2M(y,s);prin tf("n");DestroyStack(S);/销毁栈S,栈S不再存在四.调试测试1

19、.十进制数365转换二进制数测试结果如下:(图1)个需转拱的进制冰加诃"边叶讣佃(I入需曼转换成的进制H<2op8op16>:2 H出转孩成2进制的结杲= 101101101G* "C:Docua已nt吕 and Sett ingsAd>inist ratarlfiXADebuga_ eze斎给定一:盧输入二空砒制勲M'1巨Pres ani/ kty to continue2.十六进制数1A2B3C专换十进制数测试结果如下:(图2)卜:<"'Q - DocuAent s and Sett ingsXAdBinistrat o

20、r桌面'工具Debua. exc* 斎给定一个 爲技抜阳1制 糸加晶“佃 二IE门IE请输入缢进制位数:&埴辎入红进制的每隹并使每位用空格隔开汕« 2 B 3 C蕭奏转掛的®M"=ib请喻出務换成10逬制的笔杲:1715004Press an 1/ key to continue 3.二进制数11001100转换八进制数测试结果如下:(图3)匚、*C: VDocuaent s and Sett ingsXAdBinistrat ot桌面、工具Debua« ese 二个需转殃 的逬制H启opgtH;0(Ji<L6772矯揃入2进丽粒藪用隧输入2进制的每位并使每位用空格侖开诅1 B 0 1 1 0 0 需醫转抄的进制凤贷需岀驀换成8逬制的结杲Press anv key to continue4.八进制数1234转换为十六进制数测

温馨提示

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

评论

0/150

提交评论