数据结构课程设计报告-进制转换
进制转换 实验报告

进制转换实验报告进制转换实验报告一、引言进制转换是计算机科学中非常基础的概念之一。
在计算机科学中,常见的进制有二进制、八进制、十进制和十六进制。
本次实验旨在通过实际操作,深入理解进制转换的原理和方法,并通过实验结果验证理论的正确性。
二、实验目的1. 掌握二进制、八进制、十进制和十六进制的表示方法;2. 理解进制转换的原理和方法;3. 验证进制转换的正确性。
三、实验过程1. 二进制转十进制通过实验我们发现,二进制数的每一位上的数值都是2的幂次方。
例如,二进制数1011转换为十进制数的计算过程如下:1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11通过多次实验,我们验证了二进制转换为十进制的方法的正确性。
2. 十进制转二进制十进制数转换为二进制数的方法是不断除以2,将余数从下往上排列。
例如,将十进制数11转换为二进制数的计算过程如下:11 / 2 = 5 余 15 / 2 = 2 余 12 / 2 = 1 余 01 /2 = 0 余 1将余数从下往上排列,得到二进制数1011。
通过多次实验,我们验证了十进制转换为二进制的方法的正确性。
3. 八进制和十六进制的转换八进制和十六进制的转换方法与二进制和十进制类似,只是基数不同。
八进制的基数为8,十六进制的基数为16。
通过实验,我们发现八进制和十六进制的转换方法也是非常简单和直观的。
四、实验结果通过多次实验,我们成功地将二进制、八进制、十进制和十六进制相互转换,并验证了转换方法的正确性。
实验结果表明,进制转换是可靠和准确的。
五、实验总结通过本次实验,我们深入理解了进制转换的原理和方法,并通过实际操作验证了理论的正确性。
进制转换在计算机科学中具有重要的意义,它不仅在计算机编程中得到广泛应用,还在计算机底层的存储和处理中起到关键作用。
掌握进制转换的方法,对于理解计算机科学的其他概念和算法也非常有帮助。
(完整word版)c语言中进制转换数据结构实训报告

《进制之间转换》数据结构程序设计报告专业:计算机网络技术班级:姓名:学号:二○一二年四月三十日目录1.需求分析 (1)2.概要设计 (2)3.采用的算法(流程图) (2)4.详细设计 (2)5. 调试分析 (3)6.用户使用说明 (3)7.测试结果 (3)8.附录 (13)1、需求分析(1)输入的形式和输入值的范围:◆不大于4位的十六进制数◆不大于16位的二进制数◆十进制数(2)输出的形式:同上(3)程序的功能:十六进制转化为十进制十六进制转化为二进制十六进制转化为八进制十进制转化为二进制十进制转化为八进制二进制转化为十进制二进制转化为十六进制(4)测试数据十六进制转化为十进制、十六进制转化为二进制:十六进制转化为八进制、十进制转化为二进制、十进制转化为八进制、二进制转化为十进制:二进制转化为十六进制、输入输入出错:2、概要设计:一,进制之间的转换用到头文件包match.h、stdio.h、stdlib.h。
问题要求根据输入的不同字符,执行不同的功能。
转换过程中需要各个函数之间进行调用二,输入合适的数据得出转换的数据,其重要考虑到输入数据的范围。
3.采用的算法(流程图)4.详细设计:5.调试分析:(1)首先是乱码问题。
由于使用中文所以出现了乱码,把中文改成英文就好了。
(2)如果选择0直接退出根本看不到goodbye所以加getch()可以停留在执行屏幕(3)在这次设计中,首先,我发现了很多问题,由于自己基本的语句掌握的不是十分熟练,所以在一开始不知道怎样把松散的函数调用紧凑地联系起来,经过仔细的看书以及向同学请教,终于将基本框架搭好,在调整细节时就相对轻松一些了,所以经过这次课程设计,我总结出了自己在学习数据结构中的不足,并且为其他类似语言打下了良好的基础,十分感谢老师以及同学的帮助,在此过程中还锻炼了我们与别人沟通的能力,使我们受益匪浅。
6、用户使用说明:(1)运行程序选择自己要转换的形式(2)输入对应数据(3)输入0退出7、测试结果:输入1———>输入1A1——>输出417输入2——>输入1A1——>输出110100001B输入3——>输入1A1——>输出641Q输入4——>输入12——>输出1100B输入5——>输入 12——>输出 14K输入6——>输入11011010——>输出218输入7——>输入101——>输出5H输入0——>退出8、附录(源代码):#include <stdio.h>#include <stdlib.h>#include<math.h>int Hten(){ int i=0,j=0,m=0;char x[10];char f=0;printf("Please enter no more than 4digit hexadecimal number sixteen\n");while(f!='\n'){scanf("%c",&x[i]);f=x[i];m++;i++;}for(i=0;i<m-1;i++){ if(x[i]>='A'&&x[i]<='F')x[i]=x[i]-55;elseif(x[i]>='0'&&x[i]<='9')x[i]=x[i]-48;else{ printf("Please input the correct form\n");return 0;}}for(i=0;i<m-1;i++)j=j+x[i]*pow(16,m-1-i-1);return j;}typedef int datatype;#define maxsize 64typedef struct{datatype data[maxsize];int top;}seqstack;setnull(seqstack *s){s->top=-1;}int Empty(seqstack *s){if(s->top>=0)return 0;/*false*/elsereturn 1;/*ture*/}int Full(seqstack *s){if(s->top==maxsize-1)return 1;elsereturn 0;}seqstack *push(seqstack *s,int x,int N) {int n;if(Full(s)){printf("overfull\n");return NULL;}else{while(x!=0){ n=x%N;x=x/N;s->top++;s->data[s->top]=n;}return s;}}int pop(seqstack *s){int x;if(Empty(s)){printf("empty\n");return 0;} else{x=s->data[s->top];s->top--;return x;}}Htwo(){seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Hten();if(k!=0){push(s,k,2);}else return ;printf("Converted to a binary outcome for\n"); while(!Empty(s)){printf("%d",pop(s));}printf("B\n");}Height(){int k;seqstack *s;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Hten();if(k!=0)push(s,k,8);else return;printf("Converted to octal results\n");while(!Empty(s)){printf("%d",pop(s));}printf("Q\n");}Tentwo(){ seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);printf("Please enter a decimal number\n");scanf("%d",&k);push(s,k,2);printf("Converted to a binary outcome for\n"); while(!Empty(s)){printf("%d",pop(s));}printf("B\n");}Teneight(){ seqstack *s;int k;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);printf("Please enter a decimal number\n");scanf("%d",&k);push(s,k,8);printf("Converted to octal results\n");while(!Empty(s)){printf("%d",pop(s));}printf("Q\n");}int Twoten(){int i=0,j=0,m=0;char x[10];char f=0;printf("Please enter no more than 16 bits of the binary number\n"); while(f!='\n'){scanf("%c",&x[i]);f=x[i];m++;i++;}for(i=0;i<m-1;i++)if(x[i]=='0'||x[i]=='1')x[i]=x[i]-48;else{ printf("Please input the correct form!\n");return 0;}}for(i=0;i<m-1;i++)j=j+x[i]*pow(2,m-1-i-1);return j;}Twoh(){ int k,y;seqstack *s;s=(seqstack *)malloc(sizeof(seqstack));setnull(s);k=Twoten();if(k!=0){push(s,k,16);}else return ;printf("Into sixteen decimal results\n");while(!Empty(s)){ y=pop(s);if(y<10)printf("%d",y);elseprintf("%c",y+55);printf("H\n");}main(){int a,k;INDEX:printf("**************************************\n");printf("0:\t exit \n");printf("1:\tSixteen hexadecimal conversion to decimal\n");printf("2:\tSixteen hexadecimal into binary\n");printf("3:\tSixteen hexadecimal converted to octal\n");printf("4:\tDecimal to binary\n");printf("5:\tDecimal to octal\n");printf("6:\tBinary to decimal conversion\n");printf("7:\tBinary conversion of sixteen hexadecimal\n");printf(" \t\tcopyright 2008-2018 \n");printf("**************************************\n"); SCANI: printf("What are you going to do?Please select a menu\n");scanf("%d",&a);getchar();switch(a){case 0: goto EXT;case 1: goto SET1;case 2: goto SET2;case 3: goto SET3;case 4: goto SET4;case 5: goto SET5;case 6: goto SET6;case 7:goto SET7;default: goto INDEX;}SET1:k=Hten();if(k!=0){printf("The result is converted to decimal\n");printf("%d\n",k);}goto SCANI;SET2: Htwo(); goto SCANI;SET3: Height(); goto SCANI;SET4: Tentwo();goto SCANI;SET5: Teneight();goto SCANI;SET6:k=Twoten();if(k!=0){printf("The result is converted to decimal\n");printf("%d\n",k);}goto SCANI;SET7:Twoh();goto SCANI;EXT: printf(" goodbye!\n");getch();}。
数据结构-进制转换实验报告

计算机科学与技术系实验报告专业名称计算机科学与技术课程名称《数据结构》项目名称栈实现进制的转换班级学号姓名同组人员无实验日期一、实验目的与要求:(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。
)(一)实验目的:应用栈来实现对数据的操作。
掌握,进栈,出栈(二)实验要求:用栈实现对数据进制的转换(三)实验环境:VC++6.0.二、实验内容#include <stdio.h>#include <malloc.h>#define maxlen 100typedef int dataType;typedef struct{dataType data[maxlen];int top;}seqstack;/*置空栈*/seqstack *Initstack(seqstack *S){S->top = -1;return S;}/*初始化栈*/seqstack *setstack(){seqstack *S;S = (seqstack *) malloc (sizeof(seqstack));S->top = -1;return S;}/*判断栈空*/int stackEmpty(seqstack *S){if(S->top<0)return 1;elsereturn 0;}/*判断栈满*/int stackFull(seqstack *S){if(S->top < (maxlen -1) && S->top >= -1) return 0;elsereturn 1;}/*入栈*/void push(seqstack *S, dataType x){if(stackFull(S))printf("此栈已经满\n");else{S->top ++;S->data[S->top] = x;}}/*出栈*/dataType pop(seqstack *S){dataType x;if(stackEmpty(S))printf("此栈为空\n");else{x = S->data[S->top];S->top--;}return x;}void main(){seqstack *S;dataType e;int m,n;S = setstack();printf("请输入一个十进制的数:");scanf("%d", &e);printf("请输入你想转出成的进制:");scanf("%d", &m);while(e){n = e%m;push(S,n);e = e/m;}printf("转换成%d进制为:", m);while(!stackEmpty(S)){e = pop(S);printf("%d",e);}printf("\n");}三、实验分析与小结(实验过程中的问题分析、产生的原因以及解决方法;实验结果分析;有待优化思路)(一)实验结果截图(二)总结通过栈,先进后出的特点,我们可以对数据实现进制的转换。
进制转换_实验报告

一、实验目的1. 理解不同进制之间的转换原理。
2. 掌握二进制、八进制、十进制和十六进制之间的相互转换方法。
3. 培养实际操作能力和逻辑思维能力。
二、实验原理进制转换是计算机科学和数字电路中的基本概念。
常见的进制有二进制、八进制、十进制和十六进制。
它们之间的转换主要基于位权原理。
- 二进制:基数为2,只有0和1两个数字,每一位的值是2的幂次方。
- 八进制:基数为8,每一位的值是8的幂次方。
- 十进制:基数为10,每一位的值是10的幂次方。
- 十六进制:基数为16,每一位的值是16的幂次方,其中A-F表示10-15。
三、实验器材- 计算机- 文档编辑软件(如Microsoft Word)四、实验步骤1. 二进制转十进制- 将二进制数按照位权原理进行计算。
- 例如,二进制数1101转换为十进制:\(1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13\)。
2. 十进制转二进制- 使用除以2的方法,将十进制数不断除以2,记录余数。
- 将余数从下到上排列,得到二进制数。
- 例如,十进制数13转换为二进制:\(13 \div 2 = 6\) 余 1,\(6 \div 2 = 3\) 余 0,\(3 \div 2 = 1\) 余 1,\(1 \div 2 = 0\) 余 1,所以13的二进制为1101。
3. 八进制转十进制- 将八进制数按照位权原理进行计算。
- 例如,八进制数123转换为十进制:\(1 \times 8^2 + 2 \times 8^1 + 3 \times 8^0 = 64 + 16 + 3 = 83\)。
4. 十进制转八进制- 使用除以8的方法,将十进制数不断除以8,记录余数。
- 将余数从下到上排列,得到八进制数。
- 例如,十进制数83转换为八进制:\(83 \div 8 = 10\) 余 3,\(10 \div 8 = 1\) 余 2,\(1 \div 8 = 0\) 余 1,所以83的八进制为123。
进制转换c课程设计

进制转换c 课程设计一、课程目标知识目标:1. 理解进制转换的基本概念,掌握二进制、八进制、十进制和十六进制之间的转换方法;2. 学会使用数学原理和逻辑推理进行不同进制间的转换;3. 掌握在实际问题中运用进制转换解决计算和存储等相关问题。
技能目标:1. 能够准确、迅速地进行不同进制间的转换,提高计算和逻辑思维能力;2. 能够运用所学进制转换知识解决实际生活中的问题,培养学以致用的能力;3. 通过小组合作和讨论,提高团队协作和沟通能力。
情感态度价值观目标:1. 培养学生对计算机科学的兴趣,激发学习积极性;2. 培养学生勇于探索、敢于创新的精神,增强解决问题的信心;3. 增强学生对科技发展对社会进步的作用的认识,提高社会责任感。
本课程针对的学生特点是具备一定的数学基础和逻辑思维能力,对计算机科学感兴趣。
通过本课程的学习,旨在让学生掌握进制转换的知识和技能,培养他们在实际问题中运用所学知识解决问题的能力,同时提高他们的团队协作和沟通能力,激发对科学技术的热爱和探索精神。
在教学过程中,注重理论与实践相结合,关注学生的个体差异,因材施教,确保课程目标的实现。
二、教学内容1. 引入进制概念:介绍不同进制的定义和特点,如二进制、八进制、十进制和十六进制;相关教材章节:第一章 计算机基础知识 第3节 进制与编码2. 进制转换方法:a. 二进制与十进制的转换;b. 八进制与十进制的转换;c. 十六进制与十进制的转换;d. 不同进制间的转换方法。
相关教材章节:第一章 计算机基础知识 第4节 进制转换3. 实际问题中的应用:a. 计算机存储单位与进制转换的关系;b. 网络地址进制转换的实际应用;c. 编程中进制转换的应用。
相关教材章节:第一章 计算机基础知识 第5节 进制转换的应用4. 教学大纲:第一课时:进制概念及二进制与十进制的转换;第二课时:八进制与十进制、十六进制与十进制的转换;第三课时:不同进制间的转换方法及实际问题中的应用。
课程设计进制转化

课程设计进制转化一、教学目标本课程的教学目标是使学生掌握进制转化的基本知识和方法,能够熟练地进行不同进制间的转换。
具体包括:1.知识目标:使学生了解不同进制的定义、特点和转换方法,理解二进制、八进制、十进制和十六进制之间的相互关系。
2.技能目标:培养学生能够运用进制转换方法,解决实际问题,如电子计算机中的数据表示和存储、计算机网络中的数据传输等。
3.情感态度价值观目标:培养学生对计算机科学和信息技术领域的兴趣和好奇心,提高学生分析和解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括:1.进制的基本概念:介绍二进制、八进制、十进制和十六进制的定义、特点和表示方法。
2.进制转换方法:讲解不同进制间的转换方法,包括手动转换和编程转换。
3.进制转换在实际应用中的例子:通过实际案例,使学生了解进制转换在电子计算机、计算机网络等领域的应用。
三、教学方法为了达到本课程的教学目标,将采用以下教学方法:1.讲授法:通过讲解进制的基本概念和转换方法,使学生掌握进制转化的理论知识。
2.讨论法:学生进行小组讨论,分享不同进制转换的方法和技巧,培养学生的团队合作和沟通能力。
3.案例分析法:通过分析实际案例,使学生了解进制转换在实际应用中的重要性,提高学生解决问题的能力。
4.实验法:安排实验课程,使学生亲手进行不同进制的转换,培养学生的实践能力和创新精神。
四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:选择一本适合学生水平的进制转化教材,作为学生学习的主要参考资料。
2.参考书:提供一些进制转化的参考书籍,供学生深入学习。
3.多媒体资料:制作多媒体课件,通过动画、图表等形式,生动形象地展示进制转化的概念和方法。
4.实验设备:准备计算机、编程环境等实验设备,供学生进行实验和实践。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性。
进制转换汇报课教案[五篇]
![进制转换汇报课教案[五篇]](https://img.taocdn.com/s3/m/c18378f64128915f804d2b160b4e767f5acf80bf.png)
进制转换汇报课教案[五篇]第一篇:进制转换汇报课教案《进制转换》教学设计课题:进制之间的转换教学内容:二进制、八进制、十进制、十六进制之间的转换教授方法:讲授法教学目标:了解数制的基本概念掌握其它进制转十进制和十进制转其它进制的方法教学重难点:二进制、八进制、十进制、十六进制之间的转换进制转换的方法教学活动:一、创设情境、激趣导入时钟工作的原理,让学生了解生活中的进制数,激发学生对进制数的兴趣。
自然语言中一般使用十进制,但计算机处理信息和数据归根结底都是二进制,那二进制数与十进制数之间如何进行转换呢?其他进制数中又是如何进行转换的呢?今天这节课我们就来学习进制数之间的转换方法。
二、新课讲授(一)数制的概念教师组织学生阅读教材,帮助学生理解“基数”和“位权”,了解不同进制对应的缩写。
(二)进行十进制数与二进制数之间的转换教师讲解进制转换方法,学生完成进制转换练习,并对进制数转换方法进行归纳总结。
1.十进制转换为二进制十进制数转换为二进制数时,整数部分和小数部分要分别运算。
(1)十进制整数(除2取余法)将十进制整数除以2,所得的余数即为对应的二进制数低位的值;继续对商除以2,所得的各次余数就是二进制的各位的值。
如此进行直到商等于0为止,最后一项余数为所求二进制最高位的值。
例:(322)10=(101000010)22.二进制转换为十进制(按权展开法)按照二进制数各位的权与该位数码是0或1,分别求出各位代码的数值,然后相加,就得到转换结果。
例:(1011)2=1×10^3+0×10^2+1×10^1+1×10^0(三)二进制、八进制、十六进制之间的转换1.二进制与八进制之间的转换由于8=2×2×2,即8=2³。
可知一位八进制数相当于3位二进制数。
(1)二进制数转换成八进制数将一个二进制数转换成八进制数,只要把二进制数从右往左每三位计算出对应的一位八进制数(不足三位的,前面添加“0”补足三位)。
数据结构实验报告-栈进制转换

数据结构实验报告-栈进制转换数据结构实验报告栈进制转换一、实验目的本实验旨在通过使用栈这种数据结构,实现不同进制之间的转换,加深对栈的基本概念、操作和应用的理解,提高编程能力和问题解决能力。
二、实验环境操作系统:Windows 10编程语言:C++开发工具:Visual Studio 2019三、实验原理进制转换是将一个数从一种进制表示形式转换为另一种进制表示形式的过程。
常见的进制有二进制、八进制、十进制和十六进制。
栈是一种特殊的线性表,它遵循“后进先出”(Last In First Out,LIFO)的原则。
在进制转换中,可以利用栈来存储转换过程中的余数,从而实现进制的转换。
以十进制转换为二进制为例,将十进制数除以 2 取余数,然后将商继续除以 2 取余数,直到商为 0。
将依次得到的余数从栈中取出,即可得到对应的二进制数。
四、实验内容与步骤(一)数据结构定义```cppclass Stack {private:int stackArray;int top;int capacity;public:Stack(int size) {capacity = size;stackArray = new intcapacity;top =-1;}~Stack(){delete stackArray;}void push(int element) {if (isFull()){std::cout <<"Stack Overflow" << std::endl; return;}stackArray++top = element;}int pop(){if (isEmpty()){std::cout <<"Stack Underflow" << std::endl; return -1;}return stackArraytop;}int peek(){if (isEmpty()){std::cout <<"Stack is empty" << std::endl; return -1;}return stackArraytop;}bool isEmpty(){return top ==-1;}bool isFull(){return top == capacity 1;}};```(二)十进制转二进制函数```cppvoid decimalToBinary(int decimalNumber) {Stack stack(32);while (decimalNumber > 0) {int remainder = decimalNumber % 2;stackpush(remainder);decimalNumber /= 2;}std::cout <<"十进制"<< decimalNumber <<"转换为二进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(三)十进制转八进制函数```cppvoid decimalToOctal(int decimalNumber) {Stack stack(16);while (decimalNumber > 0) {int remainder = decimalNumber % 8;stackpush(remainder);decimalNumber /= 8;}std::cout <<"十进制"<< decimalNumber <<"转换为八进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(四)十进制转十六进制函数```cppvoid decimalToHexadecimal(int decimalNumber) {Stack stack(16);while (decimalNumber > 0) {int remainder = decimalNumber % 16;if (remainder < 10) {stackpush(remainder +'0');} else {stackpush(remainder 10 +'A');}decimalNumber /= 16;}std::cout <<"十进制"<< decimalNumber <<"转换为十六进制为: ";while (!stackisEmpty()){std::cout << stackpop();}std::cout << std::endl;}```(五)主函数```cppint main(){int decimalNumber;std::cout <<"请输入一个十进制数: ";std::cin >> decimalNumber; decimalToBinary(decimalNumber);decimalToOctal(decimalNumber);decimalToHexadecimal(decimalNumber);return 0;}```五、实验结果与分析(一)实验结果输入十进制数 25,得到以下结果:二进制:11001八进制:31十六进制:19(二)结果分析通过实验,成功实现了将十进制数转换为二进制、八进制和十六进制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告设计题目:进制转换问题学生姓名:专业:信息安全班级:信息安全10-02学号:指导教师:完成日期:2011年12月课程设计报告的内容及要求一、问题描述:任意给定一个M进制的数x ,请实现如下要求:1、求出此数x的10进制值(用MD表示)2、实现对x向任意的一个非M进制的数的转换3、至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)软件环境:Vc6.0编程软件二、实验环境运行平台:Win32硬件:普通个人pc机软件环境:VC++6.0编程软件三、解决办法:1、用数组实现该问题:ten_else()函数是实现十进制转换为其它进制的函数,先设置一个while循环,当十进制数g等于零时停止,再将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。
将其他进制M转换为十进制,并将其转换为非M进制数是在主函数中实现的。
M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M 的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用ten_else()函数将其转换为非M进制的数。
实际上十进制起到了一个桥梁作用。
2、用栈实现该问题:与数组方法核心思想相同,stack定义栈,初始化一个空栈,然后判断是否为空,接着是去栈顶元素(用z表示栈顶元素),数据入栈,出栈的操作。
栈具有后进先出的性质,故其用s.pop()取数较数组的逆向取数较为方便,体现了栈的优越性。
四、设计和编码的回顾讨论和分析(1)函数ten_else()的作用体现在将任意10进制数转换为非10进制数,程序能实现1~16进制的相互转换。
在10进制以上的数需要用字母表示,由此设计了switch函数,当出现余数大与10的情况可以调用相应的字母。
考虑到最终结果是所求余数的倒序,添加新的整型变量j,通过一个for循环实现倒序。
(2)编程初期设计了else_ten函数,后几经修改将其融入main函数中较为直观。
(3)当输入10进制以下的数向10进制转换时候较为简单,程序中设计char型数组s[maxnum]来统计所输入数据的位数,不需要用户输入。
在求10进制的时候通过for循环求一个累和即可。
(4)当输入10进制以上的数设计字母较为复杂,通过对ASCⅡ表的理解设计程序。
(5)在用栈法实现非10进制向10进制转换的时候遇到了些麻烦,当输入8A的时候程序将8当成字符类型,将其编译为数字56,导致最终转换结果出现错误。
于是通过查阅ASCⅡ表对程序做出了修正,设计了条件语句if(z<=57)z-=48;if(z>=65){z-=65;z+=10;}五、程序框图六、经验和体会(1)我们在写程序的时候要多角度考虑问题,比如题目中要求栈法与数组方法同时去实现进制转换问题。
在编译过程中我们可以将特殊的问题逐渐的化为一般问题,比如10进制转换到16进制是,我举的例子是200转换为C8。
(2)通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。
掌握了如何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后出的特点。
(3)在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如设置断点和单步调试,让我们意识到要想学好编程,就得多上机调试。
一个星期时间自己用vc++实现了进制转换问题,收获很大同时在编写代码过程中也出现了很多的问题,最大的问题就是对程序设计框架结构的不了解,在实现代码与功能的连接时经常会出现各种不同的错误,在实现一些功能时系统常常会报错,许多错误不知从哪修改。
课程设计中,回顾了很多以前的东西,收获很大。
(4)每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个体学习到整体把握的跳跃,对新知识的汲取,更是把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加了自信和学习的动力。
总之,我们收获匪浅首先由衷感谢老师提供这样一个锻炼自己的机会,感受到学来的知识不只是用来完成试卷的。
一向惯于独立思考的自己学会了积极的同同学、朋友交流,取长补短,共同进步。
课程设计使自己发现考试并不是最重要,最重要的是能运用所学的知识。
在整个课程设计的学习过程中,不再是用学到的知识解题,而是在实际运用时遇到什么学什么,重在把知识应用于实际。
五、附录代码框架//实现1~16进制之间的相互转化(数组方法)//实现1~16进制之间的相互转化(数组方法)#include<iostream.h>#include<math.h>//#include<stdio.h>#define N 100#define max_num 10int y,n,s;int m,r,x;void ten_else(int g,int h) //十进制数转换为其他进制数{int c[N],mod;int i=0,j;while(g!=0){mod = g % h;g = g/h;c[i] = mod;i++;}for(j=i-1;j>=0;j--)switch(c[j]){case 10: cout<<"A"; break;case 11: cout<<"B"; break;case 12: cout<<"C"; break;case 13: cout<<"D"; break;case 14: cout<<"E"; break;case 15: cout<<"F"; break;default: cout<<c[j];}}/*void ten_else(int g,int h) //十进制数转换为其他进制数{int c[N],mod;int i=0,j;while(g!=0){mod = g % h;g = g/h;c[i] = mod;i++;}for(j=i-1;j>=0;j--){if(c[j] <= 9)cout<<c[j];elseprintf("%c",('A'+(c[j]-10)));//cout<<('A'+(c[j]-9));}}*/void main(){cout<<"请输入任意进制M:";cin>>m;if(m<10) //2~9进制转换成10进制{char s[max_num];int k,z=0,j=0;//z存储十进制数,j表示输入m进制数的位数。
for(int i=0;i<max_num;i++)s[i]='u';cout<<"请输入一个"<<m<<"进制数:";cin>>s;for(i=1;i<max_num;i++)if(s[i]!='u') j++;k=j;//保存输入位数for(i=0;i<j;i++)z=z+(s[i]-'0')*(pow(m,--k));cout<<"转换后的10进制数MD为:"<<z<<endl;cout<<"请输入需要转换成的进制(非M):";cin>>r;cout<<"输出转换成"<<r<<"进制的结果:";ten_else(z,r);cout<<endl;}else if(m<=16 && m>=11) //11~16进制转换成10进制{char s[max_num];int k,z=0,j=0;//z存储十进制数,j表示输入16进制数的位数。
for(int i=0;i<max_num;i++)s[i]='u';cout<<"请输入一个"<<m<<"进制数:";cin>>s;for(i=1;i<max_num;i++)if(s[i]!='u') j++;k=j;//保存输入位数for(i=0;i<j;i++){if(s[i]>='A'&&s[i]<='F')z=z+(s[i]-'A'+10)*(pow(m,--k));if(s[i]>='a'&&s[i]<='f')z=z+(s[i]-'a'+10)*(pow(m,--k));if(s[i]>='0'&&s[i]<='9')z=z+(s[i]-'0')*(pow(m,--k));}cout<<"转换后的10进制数为:"<<z<<endl;cout<<"请输入需要转换成的进制(非M):";cin>>r;cout<<"输出转换成"<<r<<"进制的结果:";ten_else(z,r);cout<<endl;}else if(m==10) //十进制转换成其它进制{int x;cout<<"请输入一个10进制数:";cin>>x;cout<<"请输入需要转换成的进制(非M):";cin>>r;if(r<=10){cout<<"输出转换成"<<r<<"进制的结果:";ten_else(x,r);cout<<endl;}else{cout<<"输出转换成"<<r<<"进制的结果:";ten_else(x,r);cout<<endl;}}}//实现1~16进制之间的相互转化(堆栈方法)#include <iostream.h>#include <math.h>enum error_code{success,overflow,underflow};const maxlen=100;int a,n,h;class stack{public:stack();bool empty()const;bool full()const;error_code get_top(int &x)const;error_code push(int x);error_code pop();int seesize(){return count;}private:int count;int data[maxlen];};//初始化链栈stack::stack(){count = 0;}bool stack::empty()const //判断栈是否为空{if(count == 0) return true;return false;}error_code stack::get_top(int &x)const //取栈顶元素{if ( empty() ) return underflow;else{x = data[count - 1];return success;}}error_code stack::push(int x) //入栈{if( full() ) return underflow;data[count] = x;count ++;return success;}error_code stack::pop() //出栈{if ( empty() ) return underflow;count --;return success;}bool stack::full()const{if( count == maxlen ) return true;return false;}void ten_else(int g,int h) //十进制数g转换为其他进制(h进制)数{int a,x;int mod;stack s;mod = g % h;if(mod>9){a=mod+55;if(a>=65){switch(a - 55){case 10:cout<<"A";break;case 11:cout<<"B";break;case 12:cout<<"C";break;case 13:cout<<"D";break;case 14:cout<<"E";break;case 15:cout<<"F";break;default:break;}}else{s.push(a);}}else{s.push(mod);}g = g/h;if(g>0) ten_else(g,h);while(!s.empty()){s.get_top(x);s.pop();cout<<x;}}int main(){int m,a,z,sum;int i = 1;int j = 0;sum=0;stack s;cout<<"请输入任意进制M(1~16):";cin>>m;cout<<"请输入"<<m<<"进制的数:";if(m == 10){int x;cin>>x;cout<<"10进制数MD即为:"<<x<<endl;cout<<"输入最终转化的进制(非M):";cin>>h;ten_else(x,h);cout<<endl;}else if(m<10){int x;cin>>x;while(x!=0){a = x % 10;x = x/10;s.push(a);}while(!s.empty()){s.get_top(z);sum = sum + z*pow(m,s.seesize()-1);s.pop();}cout<<"转换的10进制数为:";cout<<sum<<endl;cout<<"输入最终转化的进制(非M):";cin>>h;ten_else(sum,h);cout<<endl;}else{char x;int j = 0;do{cin>>x;if(x!='.')s.push(x);}while(x!='.');while(!s.empty()){s.get_top(z);if(z<=57)z-=48;if(z>=65){z-=65;z+=10;}sum = sum + z * pow(m,j);j++;s.pop();}cout<<"转换的10进制数为:";cout<<sum<<endl;cout<<"输入最终转化的进制(非M):";cin>>h;ten_else(sum,h);cout<<endl;}return 0;}。