数据结构课程设计数制转换
数据结构—数制转换

数据结构—数制转换数制转换1.数制的基本概念数制是人们用来表示和处理数的方式和方法,常见的数制包括十进制、二进制、八进制和十六进制。
在计算机科学中,数制转换是一项基本且重要的操作,可以实现不同进制数的相互转换。
2.十进制转其他进制2.1 二进制转换:________将十进制数转换为二进制数的方法是除二取余,从低位到高位依次得到余数。
2.2 八进制转换:________将十进制数转换为八进制数的方法是除八取余,从低位到高位依次得到余数。
2.3 十六进制转换:________将十进制数转换为十六进制数的方法是除十六取余,从低位到高位依次得到余数。
在十六进制中,带有10-15的余数使用A-F来表示。
3.其他进制转十进制3.1 二进制转换:________将二进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。
3.2 八进制转换:________将八进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。
3.3 十六进制转换:________将十六进制数转换为十进制数的方法是将每一位的数字乘以相应的权值,并将结果相加。
在十六进制中,带有A-F的字符使用10-15来表示。
4.其他进制之间的转换4.1 二进制与八进制的转换:________将二进制数转换为八进制数可以先将二进制数每三位分组,然后将每组转换为相应的八进制数。
4.2 二进制与十六进制的转换:________将二进制数转换为十六进制数可以先将二进制数每四位分组,然后将每组转换为相应的十六进制数。
4.3 八进制与十六进制的转换:________将八进制数转换为十六进制数可先将八进制数转换为二进制数,然后将二进制数每四位分组,再将每组转换为相应的十六进制数。
5.附件本文档无附件。
6.法律名词及注释无。
数据结构课程设计数制转换

目录1前言 (1)1.1设计背景和意义 (1)1.1.1数据结构简介 (2)1.1.2选择算法的原因 (2)1.2设计的原理和内容 (2)2正文 (2)2.1 设计的目的和意义 (2)2.2 目标和总体方案 (2)2.3 设计方法和内容 (3)2.3.1模块划分 (3)2.3.2主要程序模块 (3)2.4 程序的设计思想和内容 (6)2.4.1用数组实现该问题 (6)2.4.2用栈实现该问题 (6)2.5 设计创新和关键技术 (6)2.6 程序调试 (6)2.7程序流程图 (7)2.8结论 (8)参考文献 (9)附录 (9)1前言1.1设计背景和意义1.1.1数据结构简介数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。
数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。
它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。
在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
1.1.2选择算法的原因在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
1.2设计的原理和内容设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。
本软件采用C 语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。
数据结构数制转换

数据结构数制转换第一点:二进制与十进制的转换二进制与十进制之间的转换是计算机科学和信息技术中的基础。
二进制仅使用两个数字:0和1,而十进制使用10个数字:0到9。
1.1 二进制转十进制二进制转十进制是通过将每个二进制位(bit)乘以其权重(2的幂次),然后将结果相加得到十进制数。
例如,二进制数1101转换为十进制数的过程如下:• 1 * 2^3 = 1 * 8 = 8• 1 * 2^2 = 1 * 4 = 4•0 * 2^1 = 0 * 2 = 0• 1 * 2^0 = 1 * 1 = 1将上面的结果相加:8 + 4 + 0 + 1 = 13因此,二进制数1101等于十进制数13。
1.2 十进制转二进制十进制转二进制则是通过不断除以2,并记录余数的过程,最后将余数从下到上(从最后一个余数到第一个余数)排列得到二进制数。
例如,十进制数13转换为二进制数的过程如下:1.13 / 2 = 6 ... 余数 12. 6 / 2 = 3 ... 余数 03. 3 / 2 = 1 ... 余数 14. 1 / 2 = 0 ... 余数 1将余数从下到上排列:1101因此,十进制数13等于二进制数1101。
第二点:八进制与十进制的转换八进制与十进制之间的转换相对简单,因为八进制使用的是0到7的八个数字,与二进制和十进制的基数不同。
2.1 八进制转十进制八进制转十进制的方法与二进制转十进制类似,都是通过将每个位上的数字乘以其权重(8的幂次),然后相加。
例如,八进制数725转换为十进制数的过程如下:•7 * 8^2 = 7 * 64 = 448• 2 * 8^1 = 2 * 8 = 16• 5 * 8^0 = 5 * 1 = 5将上面的结果相加:448 + 16 + 5 = 479因此,八进制数725等于十进制数479。
2.2 十进制转八进制十进制转八进制则可以通过不断除以8,并记录余数的过程,最后将余数从下到上排列得到八进制数。
数据结构—数制转换

数据结构—数制转换正文:一、引言数制转换是计算机科学中的重要概念之一。
在计算机中,数字通常以二进制(基数为2)形式表示,但在实际应用中,我们经常需要将数字转换为其他进制,如十进制(基数为10)、八进制(基数为8)或十六进制(基数为16)。
本文将介绍数制转换的基本原理和常见的转换方法。
二、二进制到十进制二进制是计算机最常用的数制,但在人类的日常生活中,我们更习惯于使用十进制。
二进制到十进制的转换方法如下:1、将二进制数按权展开,从右往左依次为2的0次幂、2的1次幂、2的2次幂:::,逐个乘以对应的二进制位权值。
2、将计算结果求和,即可得到十进制数。
三、十进制到二进制十进制到二进制的转换方法如下:1、用2除以十进制数,得到的商和余数分别记录下来。
2、将得到的余数从下往上排列,即可得到对应的二进制数。
四、二进制到八进制在计算机科学中,八进制是一种常用的数制,特别适合表示和处理比特位数为3的数据。
二进制到八进制的转换方法如下:1、将二进制数从右往左逐三位分组。
2、将每组三位二进制数转换为对应的八进制数。
五、八进制到二进制八进制到二进制的转换方法如下:1、将八进制数的每一位转换为对应的三位二进制数。
2、将得到的三位二进制数拼接起来,即可得到二进制数。
六、二进制到十六进制十六进制常用于表示大量二进制数据或内存地质。
二进制到十六进制的转换方法如下:1、将二进制数从右往左逐四位分组。
2、将每组四位二进制数转换为对应的十六进制数。
七、十六进制到二进制十六进制到二进制的转换方法如下:1、将十六进制数的每一位转换为对应的四位二进制数。
2、将得到的四位二进制数拼接起来,即可得到二进制数。
八、附件本文档无附件。
九、法律名词及注释1、二进制:计算机中最常用的数制,由0和1两个数字组成。
2、十进制:人类日常生活中常用的数制,由0至9十个数字组成。
3、八进制:计算机中常用的数制,由0至7八个数字组成。
4、十六进制:计算机中用于表示大量二进制数据或内存地质的数制,由0至9和字母A至F共16个字符组成。
数制转换的课程设计报告

数制转换的课程设计报告一、教学目标本课程旨在让学生掌握数制转换的基本原理和方法,包括二进制、八进制、十进制和十六进制的相互转换。
学生应能够运用这些知识解决实际问题,提高他们在信息技术领域的应用能力。
通过本课程的学习,学生将能够:1.知识目标:理解数制转换的基本概念,掌握不同数制之间的转换规则和方法。
2.技能目标:能够运用所学的数制转换方法,进行不同进制之间的数值转换,并解决实际问题。
3.情感态度价值观目标:培养学生的逻辑思维能力,提高他们对信息技术领域的兴趣,培养他们积极探索和合作学习的精神。
二、教学内容本课程的教学内容主要包括数制转换的基本原理和方法。
具体包括:1.二进制与十进制的转换:理解二进制和十进制之间的关系,掌握二进制数转换为十进制数和十进制数转换为二进制数的方法。
2.二进制与八进制的转换:理解二进制和八进制之间的关系,掌握二进制数转换为八进制数和八进制数转换为二进制数的方法。
3.二进制与十六进制的转换:理解二进制和十六进制之间的关系,掌握二进制数转换为十六进制数和十六进制数转换为二进制数的方法。
4.八进制与十进制的转换:理解八进制和十进制之间的关系,掌握八进制数转换为十进制数和十进制数转换为八进制数的方法。
5.八进制与十六进制的转换:理解八进制和十六进制之间的关系,掌握八进制数转换为十六进制数和十六进制数转换为八进制数的方法。
6.十六进制与十进制的转换:理解十六进制和十进制之间的关系,掌握十六进制数转换为十进制数和十进制数转换为十六进制数的方法。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法。
具体包括:1.讲授法:通过教师的讲解,让学生掌握数制转换的基本原理和方法。
2.讨论法:通过小组讨论,让学生深入理解数制转换的原理,并能够解决实际问题。
3.案例分析法:通过分析实际案例,让学生了解数制转换在信息技术领域的应用。
4.实验法:通过实际操作,让学生亲手进行数制转换的实验,加深对数制转换的理解。
数制转换c语言课程设计

数制转换c语言课程设计一、课程目标知识目标:1. 学生能理解数制的基本概念,掌握二进制、十进制、十六进制之间的转换方法;2. 学生能运用C语言编写程序实现数制转换,理解程序设计中的逻辑运算和位运算;3. 学生了解计算机中数值存储的方式,理解数制转换在计算机科学中的应用。
技能目标:1. 学生能够运用所学知识,独立编写和调试简单的数制转换C语言程序;2. 学生通过实际操作,提高编程解决问题的能力,培养逻辑思维和算法设计能力;3. 学生能够运用数制转换技能,解决实际问题,为后续学习计算机科学与技术打下基础。
情感态度价值观目标:1. 学生通过数制转换的学习,培养对计算机科学的兴趣和求知欲,激发学习积极性;2. 学生在小组合作学习过程中,培养团队协作精神和沟通能力;3. 学生在解决实际问题的过程中,树立正确的价值观,认识到科技对生活的影响,增强社会责任感。
课程性质:本课程为信息技术学科选修课程,以实践操作为主,结合理论讲解,培养学生的编程能力和逻辑思维。
学生特点:学生处于高中年级,具备一定的计算机操作基础,对编程有一定了解,好奇心强,喜欢动手实践。
教学要求:教师需关注学生的个体差异,提供个性化的指导,注重理论与实践相结合,提高学生的编程技能和解决问题的能力。
通过教学评估,确保学生达到课程目标,为后续学习打下坚实基础。
二、教学内容1. 数制基本概念:二进制、十进制、十六进制特点及表示方法;2. 数制转换原理:不同数制间的转换规则,重点讲解二进制与十进制的转换;3. C语言数制转换编程:位运算符的使用,逻辑运算符的应用,编写转换程序;4. 计算机中数值存储:了解计算机内部数值的存储方式,理解补码概念;5. 实践操作:分组讨论,编写和调试数制转换程序,进行案例分析;6. 知识拓展:数制转换在计算机中的应用,如IP地址转换、字符编码转换等。
教学内容安排:第一课时:数制基本概念及转换原理学习;第二课时:C语言数制转换编程方法讲解;第三课时:计算机中数值存储方式学习,实践操作指导;第四课时:分组讨论,编写和调试数制转换程序,进行案例分析;第五课时:知识拓展,了解数制转换在实际应用中的作用。
数据结构课程设计数制转换

目录1前言 (2)1.1设计背景和意义 (2)1.1.1数据结构简介 (2)1.1.2选择算法的原因 (2)1.2设计的原理和内容 (2)2正文 (2)2.1 设计的目的和意义 (2)2.2 目标和总体方案 (3)2.3 设计方法和内容 (3)2.3.1模块划分 (3)2.3.2主要程序模块 (3)2.4 程序的设计思想和内容 (6)2.4.1用数组实现该问题 (6)2.4.2用栈实现该问题 (6)2.5 设计创新和关键技术 (7)2.6 程序调试 (7)2.7程序流程图 (8)2.8结论 (9)参考文献 (9)附录 (10)1前言1.1设计背景和意义1.1.1数据结构简介数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。
数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。
它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。
在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
1.1.2选择算法的原因在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
1.2设计的原理和内容设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。
本软件采用C 语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。
数据结构实验2数制转换

实验二、数制转换一、实验目的1.掌握堆栈的存储方式和基本操作。
2.掌握堆栈后进先出运算原则在解决实际问题中的应用。
3.掌握使用栈的原理来解决数制转换问题。
二、实验内容利用栈结构,编写程序将十进制数转换成二进制数或八进制数。
提示:十进制数值转换成二进制使用辗转相除法将一个十进制数值转换成二进制数值。
即用该十进制数值除以2,并保留其余数;重复此操作,直到该十进制数值为0为止。
最后将所有的余数反向输出就是所对应的二进制数值。
十进制数值转换成八进制算法类似。
转换算法要求用一个函数完成。
顺序栈的基本操作的代码可参考如下:typedef struct{DataType stack[MaxStackSize];int top;} SeqStack;void StackInitiate(SeqStack *S) /*初始化顺序堆栈S*/{ S->top = 0; /*定义初始栈顶下标值*/}int StackNotEmpty(SeqStack S)/*判顺序堆栈S非空否,非空则返回1,否则返回0*/{ if(S.top <= 0) return 0;else return 1;}int StackPush(SeqStack *S, DataType x)/*把数据元素值x压入顺序堆栈S,入栈成功则返回1,否则返回0 */{ if(S->top >= MaxStackSize){ printf("堆栈已满无法插入! \n");return 0;}else{ S->stack[S->top] = x;S->top ++;return 1;}}int StackPop(SeqStack *S, DataType *d)/*弹出顺序堆栈S的栈顶数据元素值到参数d ,出栈成功则返回1,否则返回0*/ { if(S->top <= 0)printf("堆栈已空无数据元素出栈! \n");return 0;}else{S->top --;*d = S->stack[S->top];return 1;}}int StackTop(SeqStack S, DataType *d)/*取顺序堆栈S的当前栈顶数据元素值到参数d ,成功则返回1,否则返回0*/ {if(S.top <= 0){ printf("堆栈已空! \n");return 0;}else{ *d = S.stack[S.top - 1];return 1;}}三、实验源代码#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100typedef int DataType;typedef struct node{DataType data[MAXSIZE];int top;}SeqStack,*PSeqStack;typedef structDataType data[MAXSIZE];int front,rear;}SeqQueue,*PSeqQueue;PSeqStack Init1(void){PSeqStack S;S=(PSeqStack)malloc(sizeof(SeqStack));if(S) S->top=-1;return S;}PSeqQueue Inin2(){PSeqQueue Q;Q=(PSeqQueue)malloc(sizeof(SeqQueue));if(Q){Q->front=0;Q->rear=0;}return Q;}int Empty1(PSeqStack S)if(S->top==-1)return(1);elsereturn 0;}int Empty2(PSeqQueue Q){if(Q && Q->front==Q->rear)return 1;elsereturn 0;}int Push(PSeqStack S,DataType x) {if(S->top==MAXSIZE-1)return 0;else{S->top++;S->data[S->top]=x;return 1;}int In(PSeqQueue Q, DataType x){if((Q->rear+1)%MAXSIZE==Q->front ) {printf("队满");return -1;}else{Q->rear=(Q->rear+1)%MAXSIZE;Q->data[Q->rear]=x;return 1;}}int Pop(PSeqStack S,DataType *x){if(Empty1(S))return 0;*x=S->data[S->top];printf("%d",*x);S->top--;return 1;int Out(PSeqQueue Q){if(Empty2(Q)){printf("队空");return -1;}else{Q->front=(Q->front+1)%MAXSIZE;printf("%d",Q->data[Q->front]);}return 0;}void transfrom1(PSeqStack S,int x,int t) {while(x!=0){Push(S,x%t);x=x/t;}while(S->top!=-1)Pop(S,&S->data[S->top]);}void transfrom2(PSeqQueue Q,float x,int t) {while(x!=0){x=x*t;In(Q,(int)x);x=x-(int)x;}while(!Empty2(Q))Out(Q);}int main(){PSeqStack S;PSeqQueue Q;int t;float x;S=Init1();Q=Inin2();printf("请输入要转换的数:");scanf("%f",&x);printf("请输入要转化成几进制:");scanf("%d",&t);printf("%f 转化成%d 进制为:",x,t);transfrom1(S,(int)x,t);if(x==(int)x){printf("\n");return 0;}printf(".");transfrom2(Q,x-(int)x,t);printf("\n");return 0;}四、实验结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1前言 (2)1.1设计背景和意义 (2)1.1.1数据结构简介 (2)1.1.2选择算法的原因 (2)1.2设计的原理和内容 (2)2正文 (2)2.1 设计的目的和意义 (2)2.2 目标和总体方案 (2)2.3 设计方法和内容 (3)2.3.1模块划分 (3)2.3.2主要程序模块 (3)2.4 程序的设计思想和内容 (6)2.4.1用数组实现该问题 (6)2.4.2用栈实现该问题 (6)2.5 设计创新和关键技术 (6)2.6 程序调试 (6)2.7程序流程图 (7)2.8结论 (8)参考文献 (9)附录 (10)1前言1.1设计背景和意义1.1.1数据结构简介数据结构是计算机程序设计的重要理论设计基础,是一门综合性的专业基础科。
数据结构是研究数据之间的相互关系,也即数据的组织形式的一门科学。
它不仅是计算机学科的核心课程,数据结构是计算机存储、组织数据的方式。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。
在计算机科学中,“数据结构”不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
1.1.2选择算法的原因在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
1.2设计的原理和内容设计了一个10进制转换其它进制(36进制以内)及逆转换的软件,该软件具有简单的将10进制数转换成2、8、16进制数以及较复杂的高进制数的转换和逆转功能。
本软件采用C 语言编写以VC++作为软件开发环境,采用顺序栈存储方式来存储运算中的数位,借助栈后进先出的特点,易于结果输出。
操作简单,界面清晰,易于为用户所接受。
2正文2.1 设计的目的和意义我们是计算机科学与技术专业的本科生,《数据结构》是我们重要的必修课程。
当代社会学要大学培养出理论扎实,动手实践能力强的大学生。
所以,本次课程设计的目的就在于通过一次实践性的活动加深对这门课程的理解,使我们在感性的认识上进一步升华为理性的认识。
为后继课程的学习打下坚实的基础。
通过本次数据结构课程设计,我们基本上掌握了课程设计流程,还掌握了一些知识和技能,这对于我们以后对于数据结构的学习有了很大的帮助和提高,加深了我们对数据结构的理解,,为今后的学习打下了坚实的基础。
同时也提高了我们对于编程这方面的能力。
2.2 目标和总体方案本次设计的目标在于设计出一个能够实现数制转换的程序,于是特制订了一个总体的方案:程序的设计第一步:查阅有关数据结构数制转换操作的资料,用半天的时间。
第二步:设计这个项目的整体架构和算法。
用一到两天的时间。
第三步:使用C语言程序设计程序语言进行算法的描述。
两天的时间。
程序的调试进行程序的调试。
用一天。
最后,我在完整的整理一遍,完成课设。
2.3 设计方法和内容2.3.1模块划分2.3.1.1用数组实现该问题(1)i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;(2)D2M(int g,int h)是实现十进制数转换为M进制数的函数;(3)M2D()是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非M进制数的转换;(4)H2D(int f)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(int g,int h)实现向非十六进制数的转换;(5)void main()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。
2.3.1.2用栈实现该问题(1)SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;(2)int InitStack(SqStack &S)到int DestroyStack(SqStack &S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;(3)SqStack S是指定义栈S;(4)D2M(int a,int b)的功能是将十进制数转换成M进制的函数;(5)M2D()的功能是M进制转换为十进制的函数;(6)void main()是主函数。
其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向转任意非M进制数的换。
2.3.2主要程序模块(1):D2M(int g,int h){int c[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]);elseprintf("%d",c[j]);return 0;}自定义函数D2M用于在用数组实现该问题的程序中十进制数转换为其他进制数(2):M2D(int e){int a[N];printf("请输入%d进制位数:",m);scanf("%d",&n);printf("请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i<n;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);return 0;}自定义函数M2D用于在用数组实现该问题的程序中二进制和八进制数转换为十进制数,并且转换为其他进制数(3):H2D(int f){int b[N];printf("请输入%d进制位数:",m);scanf("%d",&n);printf("请输入%d进制的每位并使每位用空格隔开:",m);for(i=0;i<n;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);return 0;}自定义函数H2D用于在用数组实现该问题的程序中十六进制数转换为十进制数,并转换为其他进制数(4):D2M(int a,int b){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);elseprintf("%d",e);}return 0;}自定义函数D2M用于在用栈实现该问题的程序中十进制数转换成其他进制数(5):M2D() 其他进制数转换为十进制数{char c[1000];printf("请输入需要转换的数的位数:");scanf("%d",&n);printf("请输入需要转换的数的每位并用空格隔开:");for(i=0;i<n;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);return 0;}自定义函数M2D用于用栈实现该问题的程序中其他进制数转换为十进制数2.4 程序的设计思想和内容2.4.1用数组实现该问题D2M()函数和M2D()函数是实现该问题的主要函数。
D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。
而M2D()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。
M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。
2.4.2用栈实现该问题同样是利用D2M()和M2D()两个函数实现。
两个函数的思想同利用数组实现时相同。
只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。
2.5 设计创新和关键技术利用了栈的先进后出特点来满足数制转换中从最后一位余数依次取出的要求,利用数组的特性依次存储取于数运算的结果余数,再从该数组的最后一个元素从后往前依次取出即为转换后的数。
2.6 程序调试1十进制数527的调试情况如下:2十六进制数1A2C9的调试情况如下:2.7程序流程图2.8结论通过本次课程设计,我认识到熟练掌握基础算法的重要性,对栈的含义及其基本算法有了更好的理解和应用。