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

合集下载

进制转换 实验报告

进制转换 实验报告

进制转换实验报告进制转换实验报告一、引言进制转换是计算机科学中非常基础的概念之一。

在计算机科学中,常见的进制有二进制、八进制、十进制和十六进制。

本次实验旨在通过实际操作,深入理解进制转换的原理和方法,并通过实验结果验证理论的正确性。

二、实验目的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语言中进制转换数据结构实训报告

(完整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课程设计

进制转换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.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性。

进制转换汇报课教案[五篇]

进制转换汇报课教案[五篇]

进制转换汇报课教案[五篇]第一篇:进制转换汇报课教案《进制转换》教学设计课题:进制之间的转换教学内容:二进制、八进制、十进制、十六进制之间的转换教授方法:讲授法教学目标:了解数制的基本概念掌握其它进制转十进制和十进制转其它进制的方法教学重难点:二进制、八进制、十进制、十六进制之间的转换进制转换的方法教学活动:一、创设情境、激趣导入时钟工作的原理,让学生了解生活中的进制数,激发学生对进制数的兴趣。

自然语言中一般使用十进制,但计算机处理信息和数据归根结底都是二进制,那二进制数与十进制数之间如何进行转换呢?其他进制数中又是如何进行转换的呢?今天这节课我们就来学习进制数之间的转换方法。

二、新课讲授(一)数制的概念教师组织学生阅读教材,帮助学生理解“基数”和“位权”,了解不同进制对应的缩写。

(二)进行十进制数与二进制数之间的转换教师讲解进制转换方法,学生完成进制转换练习,并对进制数转换方法进行归纳总结。

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(二)结果分析通过实验,成功实现了将十进制数转换为二进制、八进制和十六进制。

数据结构课程设计 进制的转换

数据结构课程设计 进制的转换

数据结构课程设计设计说明书进制转换的实现学生姓名学号班级成绩指导教师数学与计算机科学学院年月日课程设计任务书2013—2014学年第一学期课程设计名数据结构课程设计称:课程设计题进制转换的实现目:完成期自年月日至年月日共周限:设计内容:计算机中数据的存储形式是0,1代码,也就是以二进制的形式进行存储.运用C或VC++结合数据结构等基础知识,按以下要求编程实现各种进制的转换。

任务要求:1)阐述设计思想,画出流程图;2)能完成用户输入的十进制数转换为二进制、八进制、十六进制及其他进制数,以及将其他任意的进制数(如12进制)转换为十进制的功能,尤其注意不同进制数的表示符号;3)除十进制以外的其他进制间的相互转换功能的实现;4)将用户的输入及要求的结果能对应打印输出;5)应有较好的界面设计,说明程序测试方法;6)按照格式要求完成课程设计说明书。

设计要求:1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。

2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。

逻辑设计的结果写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。

在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。

详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。

同时加入一些注解和断言,使程序中逻辑概念清楚;5)程序调试与测试:能够熟练掌握调试工具的各种功能,设计测试数据确保程序正确。

数据结构课程设计之任意进制转换

数据结构课程设计之任意进制转换

##大学数据结构课程设计报告题目:数值转换院(系):计算机工程学院学生姓名:班级:学号:起迄日期: 6月16号到6月30号指导教师:20XX—20XX年度第 2 学期一、需求分析1.问题描述:任意给定一个M进制的数x ,请实现如下要求1) 求出此数x的10进制值(用MD表示)2) 实现对x向任意的一个非M进制的数的转换。

3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。

2.基本功能本程序用三种方法,实现把一个M进制数x转换成其他进制数,分别是数组,递归,栈。

1.把其他进制数转换成十进制包含在一个函数中:int getdex();2.把十进制转换成其他进制数用了三种方法(数组,递归,栈),数组:void array(int N)。

递归:void prind_d(int n,int c)。

栈:void initstack(stack&s) ,void push(stack &s,char e),void pop(stack s)。

3.实现把一个M进制数x转换成其他进制数:先把M进制数转换成十进制数,再把十进制数转换成其他进制数。

封装在三个函数中:void Array(),void Stack(),void Prind()。

3.输入输出输入要求其他进制数为字符型数据包括在1到9,和A到F这些字符中,输出也是包含在这些字符中。

如果输入超过这些范围进行容错处理。

二、概要设计1.设计思路:把M进制数转换成其他进制数,可以先把M进制数转换成十进制数,调用int getdex();再把十进制数转换成其他进制数(三种方法:数组,递归,栈);最后把这两个步骤结合在一起。

封装在三个函数中::void Array(),void Stack(),void Prind();通过switch语句进行选择采用哪种方法转换。

2.数据结构设计:抽象数据类型栈:ADT Stack {数据对象:D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 }数据关系:R1={ <ai-1, ai >| ai-1, ai∈D, i=2,...,n }约定an 端为栈顶,a1 端为栈底。

进制相互转换课程设计

进制相互转换课程设计

进制相互转换课程设计一、课程目标知识目标:1. 学生能理解二进制、十进制、十六进制等不同进制的基本概念和表示方法;2. 学生掌握不同进制之间的转换原则和具体操作步骤,如二进制与十进制的相互转换、十进制与十六进制的相互转换;3. 学生了解进制转换在日常生活中的应用,如计算机科学、密码学等领域。

技能目标:1. 学生能够熟练运用进制转换原则,自主完成二进制、十进制、十六进制之间的相互转换;2. 学生通过实际操作和练习,提高问题解决能力和逻辑思维能力;3. 学生能够运用所学知识,分析并解决与进制转换相关的实际问题。

情感态度价值观目标:1. 学生在学习过程中,培养对数学和计算机科学的兴趣和热情;2. 学生通过小组合作和讨论,学会与他人分享和交流,培养团队协作意识;3. 学生认识到进制转换在科技发展中的重要作用,增强对科学技术的尊重和探索精神。

课程性质:本课程为信息技术与数学相结合的实践性课程,旨在帮助学生掌握进制转换的基本知识和技能,提高学生在实际问题中的应用能力。

学生特点:六年级学生具有一定的数学基础和逻辑思维能力,对新鲜事物充满好奇,但需在教学中注意引导学生积极参与,发挥他们的主动性和创造性。

教学要求:教师应注重理论与实践相结合,通过生动的实例和实际操作,激发学生的学习兴趣,培养学生的动手能力和问题解决能力。

同时,关注学生的个体差异,因材施教,确保每位学生都能达到预期的学习成果。

二、教学内容1. 引言:通过生活中的实例,如计算机系统、电子时钟等,引出进制概念,激发学生对进制转换的兴趣。

2. 基本概念:- 二进制:介绍二进制的基本原理,以0和1表示数值;- 十进制:回顾十进制的基本概念,分析其与二进制的区别和联系;- 十六进制:引入十六进制的基本概念,了解其在计算机科学中的应用。

3. 进制转换方法:- 二进制转十进制:讲解按权展开法,指导学生完成具体操作;- 十进制转二进制:介绍短除法,通过实例讲解,让学生掌握转换方法;- 十进制与十六进制相互转换:分析转换规律,指导学生进行实际操作。

课程设计进制转换

课程设计进制转换

课程设计进制转换一、教学目标本课程的目标是让学生掌握进制转换的基本概念和方法,能够熟练地进行不同进制之间的转换。

具体来说,知识目标包括了解不同进制的定义、特点和转换规则;技能目标包括能够运用所学的知识进行手动和计算机辅助的进制转换;情感态度价值观目标包括培养学生的逻辑思维能力、问题解决能力和创新意识。

二、教学内容本课程的教学内容主要包括进制转换的基本原理和方法。

具体包括:进制转换的定义和意义,不同进制的特点和转换规则,手动和计算机辅助的进制转换方法,以及进制转换在实际应用中的例子。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。

包括:讲授法,通过讲解进制转换的基本概念和方法,帮助学生建立知识框架;讨论法,通过小组讨论和问题解答,促进学生之间的交流和思维碰撞;案例分析法,通过分析实际应用中的进制转换例子,让学生学会将理论知识运用到实际问题中;实验法,通过实验操作,让学生亲手进行进制转换,加深对知识的理解和记忆。

四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:教材,提供系统的知识体系和实例分析;参考书,提供更深入的理论和实践知识;多媒体资料,通过图像、动画等形式,帮助学生更直观地理解进制转换;实验设备,让学生能够进行实际操作,提高实践能力。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。

平时表现主要评估学生的课堂参与度和讨论表现,通过观察和记录学生在课堂上的表现来评估其学习态度和积极性。

作业主要评估学生的理解和应用能力,通过布置相关的练习题和项目任务,让学生运用所学知识解决问题。

考试主要评估学生的综合运用能力,通过笔试和上机考试的形式,测试学生对进制转换知识的掌握程度和运用能力。

六、教学安排本课程的教学安排将分为10个课时,每个课时45分钟。

教学时间安排在每周的周一和周三下午,地点安排在教室301。

教学进度将按照教学大纲进行,确保在有限的时间内完成教学任务。

进制转化实验报告模板(3篇)

进制转化实验报告模板(3篇)

第1篇实验名称:进制转化实验实验日期:____年__月__日实验地点:____实验室实验人员:____、____、____实验目的:1. 理解不同进制之间的转换原理。

2. 掌握二进制、八进制、十进制和十六进制之间的相互转换方法。

3. 培养实验操作能力和数据处理能力。

实验原理:进制是表示数值的方法,不同的进制使用不同的数字符号和规则。

常见的进制有二进制、八进制、十进制和十六进制。

本实验通过理论学习和实际操作,掌握不同进制之间的转换方法。

实验仪器与材料:1. 计算器2. 纸和笔3. 实验指导书实验步骤:一、二进制与十进制的转换1. 将十进制数转换为二进制数。

- 方法:将十进制数不断除以2,记录下余数,将余数从下到上排列,得到的数即为二进制数。

2. 将二进制数转换为十进制数。

- 方法:将二进制数从右到左,每位乘以对应的2的幂次,将所有结果相加,得到的数即为十进制数。

二、八进制与十进制的转换1. 将十进制数转换为八进制数。

- 方法:将十进制数不断除以8,记录下余数,将余数从下到上排列,得到的数即为八进制数。

2. 将八进制数转换为十进制数。

- 方法:将八进制数从右到左,每位乘以对应的8的幂次,将所有结果相加,得到的数即为十进制数。

三、十六进制与十进制的转换1. 将十进制数转换为十六进制数。

- 方法:将十进制数不断除以16,记录下余数,将余数从下到上排列,当余数大于9时,用字母A、B、C、D、E、F表示,得到的数即为十六进制数。

2. 将十六进制数转换为十进制数。

- 方法:将十六进制数从右到左,每位乘以对应的16的幂次,将所有结果相加,得到的数即为十进制数。

实验数据记录:1. 十进制数转换为二进制数:- 十进制数:10- 转换结果:10102. 十进制数转换为八进制数:- 十进制数:100- 转换结果:1443. 十进制数转换为十六进制数:- 十进制数:255- 转换结果:FF实验结果分析:通过本次实验,我们成功地将十进制数转换为二进制、八进制和十六进制数,同时也将这三种进制数转换回十进制数。

数据结构之进制转换

数据结构之进制转换

算法与数据结构实验报告实验三实验名称:栈和队列—进制转换姓名:X X X学号:211106365专业:软件工程班级:X班指导教师:X X X日期: 2013年月日一、实验目的学会应用栈或队列解决进制转换问题,熟练掌握在顺序栈(队列)或链栈(队列)上实现的各种基本操作。

二、实验内容与实验步骤内容:利用栈实现十进制和其他任意进制数的任意转换输出问题进制转换原理:N = (N div d) *d + N mod d(其中:div 为整除运算,mod 为求余运算)步骤: 1 定义栈数据类型,采用链式存储结构实现2 链栈基本操作函数原型声明3 初始化栈4 输入栈5 输出栈6 判空栈7 自定义实现进制转换函数8 数据调试9 程序结束三、实验环境操作系统winXP、开发平台:Microsoft Visual C++6.0四、实验过程与分析程序设计过程中忘了考虑到开始报数的数不能超过最大编号;而导致程序的健壮性不足,经修改后,解决了这一问题;五、实验结论(1348)10 = (2504)8(11)10 = (B)16(8)10 = (1000)2六、附录#define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量#define ERROR 0#define OVERFLOW -2#include <stdio.h>#include<malloc.h>#include<process.h>typedef int SElemType;typedef struct{SElemType *base;// 在栈构造之前和销毁之后,base 的值为NULLSElemType *top;// 栈顶指针int StackSize; //当前已分配的存储空间,以元素为单位}SqStack;void InitStack(SqStack *s) //初始化栈{s->base =(SElemType*)malloc (STACK_INIT_SIZE * sizeof(SElemType));if(!s->base) exit(OVERFLOW);s->top=s->base;s->StackSize= STACK_INIT_SIZE;}void Push(SqStack *s,SElemType e) // 输入栈{if (s->top-s->base>=s->StackSize){s->base=(SElemType *) realloc (s->base,(s->StackSize+STACKINCREMENT)*sizeof(SElemType)); //栈满,追加存储空间if(!s->base) exit(OVERFLOW); //若内存中没有s->StackSize+STACKINCREMENT个连续空间则分配失败s->top=s->base+s->StackSize;s->StackSize+=STACKINCREMENT;}*s->top++ =e;}int Pop(SqStack *s,SElemType *e) //输出栈{if (s->top==s->base)return ERROR;s->top=s->top-1;*e = *s->top;}int StackEmpty(SqStack s) //判空栈{if (s.top ==s.base)return 1;elsereturn 0;}void Conversion(int N,int m){SElemType e;SqStack s;InitStack(&s);while(N){Push(&s,N%m);N= N/m;}printf("转换后的%d进制数为:",m);while(StackEmpty(s)!=1){Pop(&s,&e);if(e>=10)printf("%c",e-10+'A');elseprintf("%d",e);}printf("\n");}void main(){int n,m;printf("请输入一个十进制数: ");scanf("%d",&n);printf("需要转成的进制m:");scanf("%d",&m);Conversion(n,m);}。

进制转换课程设计

进制转换课程设计

进制转换课程设计一、课程目标知识目标:1. 学生理解进制的概念,掌握二进制、八进制、十进制、十六进制的基本转换方法。

2. 学生能够运用所学知识解决生活中与进制转换相关的问题。

3. 学生了解不同进制在实际应用中的优势及适用场景。

技能目标:1. 学生通过实际操作,掌握进制转换的计算技巧,提高逻辑思维能力和解决问题的能力。

2. 学生能够运用所学知识,设计简单的进制转换小程序,培养编程兴趣和初步编程技能。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣和好奇心,激发学习主动性和探究精神。

2. 学生通过团队协作解决问题,培养合作精神和沟通能力。

3. 学生在学习过程中,认识到科技对社会发展的作用,增强对科技事业的尊重和责任感。

课程性质:本课程为信息技术学科的一部分,侧重于计算思维和实际操作能力的培养。

学生特点:六年级学生具有一定的逻辑思维能力,对新知识充满好奇心,喜欢动手操作。

教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的主观能动性,培养其独立思考和解决问题的能力。

在教学过程中,关注学生的个体差异,提供有针对性的指导,确保每位学生都能达到课程目标。

通过课程目标的分解和教学设计,使学生在学习过程中取得具体的学习成果,为后续课程打下坚实基础。

二、教学内容1. 引入进制概念:讲解进制的定义、意义及其在计算机科学中的应用。

相关教材章节:第一章 计算机基础知识,第三节 计算机中的数据表示。

2. 二进制、八进制、十进制、十六进制的特点及转换方法:- 二进制:讲解二进制的表示方法、运算规则及其与十进制的转换方法。

- 八进制:介绍八进制的用途,以及与二进制、十进制的转换方法。

- 十六进制:讲解十六进制的表示方法,以及与二进制、十进制的转换方法。

相关教材章节:第二章 数据表示,第一、二、三节 进制及其转换方法。

3. 进制转换应用实例:分析生活中常见的进制转换问题,如时间、日期、文件大小等。

相关教材章节:第二章 数据表示,第四节 进制在实际应用中的例子。

数据结构课程设计报告_进制转换

数据结构课程设计报告_进制转换

课程设计报告设计题目:进制转换问题学生姓名:专业:信息安全班级:信息安全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循环实现倒序。

进制的转换实验报告

进制的转换实验报告

进制的转换实验报告引言进制是计算机科学中的重要概念之一,它描述了数字在数码系统中的表示方式。

在计算机中,常用的进制有二进制、八进制和十六进制。

本次实验旨在探索进制之间的转换方法,并通过实验验证这些方法的正确性和有效性。

实验目的1. 理解二进制、八进制和十六进制的概念及其应用场景。

2. 掌握不同进制之间的相互转换方法。

3. 验证进制转换方法的正确性和有效性。

实验方法1. 二进制与八进制的转换对于二进制转八进制,需要先将二进制数按照三位一组进行划分,形成八进制的表示形式。

每个三位二进制数可以直接对应到一个八进制数。

2. 二进制与十六进制的转换对于二进制转十六进制,需要先将二进制数按照四位一组进行划分,形成十六进制的表示形式。

每个四位二进制数可以直接对应到一个十六进制数。

3. 八进制与十六进制的转换对于八进制转十六进制,需要先将八进制数转换为二进制数,然后再将二进制数转换为十六进制数。

实验结果与分析1. 二进制与八进制的转换以二进制数1011101为例,将其划分为三位一组得到八进制数的表示形式为:1011101 →001 011 101 →135经过验证,将八进制数135重新转换为二进制数,得到:001 011 101 →1011101,与原始二进制数一致。

说明二进制与八进制之间的转换方法是正确的。

2. 二进制与十六进制的转换以二进制数11011101为例,将其划分为四位一组得到十六进制数的表示形式为:11011101 →1101 1101 →DD经过验证,将十六进制数DD重新转换为二进制数,得到:1101 1101 →11011101,与原始二进制数一致。

说明二进制与十六进制之间的转换方法是正确的。

3. 八进制与十六进制的转换以八进制数175为例,将其转换为二进制数得到:001 111 101。

再将二进制数001 111 101转换为十六进制数,得到:1F。

经过验证,将十六进制数1F重新转换为八进制数,得到:1F →001 111 →175,与原始八进制数一致。

进制转换问题实验报告

进制转换问题实验报告

一、实验目的1. 理解不同进制之间的转换原理。

2. 掌握二进制、八进制、十进制和十六进制之间的转换方法。

3. 培养学生运用进制转换解决实际问题的能力。

二、实验原理进制转换是计算机科学中的一项基本技能,不同的进制表示方式具有不同的特点。

二进制是一种基数为2的计数系统,使用0和1两个数字表示。

八进制、十进制和十六进制分别以8、10和16为基数,使用0-9和A-F(大写或小写)的数字表示。

进制转换的基本原理是将一个数的每一位按照基数进行转换,然后根据需要调整小数点位置。

三、实验内容1. 二进制与十进制之间的转换2. 八进制与十进制之间的转换3. 十六进制与十进制之间的转换4. 不同进制之间的转换四、实验步骤1. 二进制与十进制之间的转换(1)将二进制数转换为十进制数将二进制数按位权展开,求和得到十进制数。

例如:二进制数1101转换为十进制数为12^3 + 12^2 + 02^1 + 12^0 = 13。

(2)将十进制数转换为二进制数使用除以2取余法,将十进制数转换为二进制数。

例如:十进制数13转换为二进制数为1101。

2. 八进制与十进制之间的转换将八进制数按位权展开,求和得到十进制数。

例如:八进制数17转换为十进制数为18^1 + 78^0 = 15。

(2)将十进制数转换为八进制数使用除以8取余法,将十进制数转换为八进制数。

例如:十进制数15转换为八进制数为17。

3. 十六进制与十进制之间的转换(1)将十六进制数转换为十进制数将十六进制数按位权展开,求和得到十进制数。

例如:十六进制数1A转换为十进制数为116^1 + 1016^0 = 26。

(2)将十进制数转换为十六进制数使用除以16取余法,将十进制数转换为十六进制数。

例如:十进制数26转换为十六进制数为1A。

4. 不同进制之间的转换(1)将二进制数转换为八进制数将二进制数每三位一组,分别转换为对应的八进制数。

例如:二进制数11011011转换为八进制数为216。

课程设计进制转化方法

课程设计进制转化方法

课程设计进制转化方法一、教学目标本章节的教学目标包括以下三个方面:1.知识目标:使学生掌握进制转化的基本概念和方法,理解不同进制之间的转换原理,并能运用其解决实际问题。

2.技能目标:培养学生运用进制转化方法进行计算和解决问题的能力,提高他们的逻辑思维和数学运算能力。

3.情感态度价值观目标:培养学生对数学学科的兴趣和好奇心,激发他们探索数学问题的热情,培养他们的团队合作意识和沟通能力。

二、教学内容本章节的教学内容主要包括以下几个部分:1.进制转化的基本概念和方法:介绍十进制、二进制、八进制和十六进制等不同进制的表示方法,以及它们之间的转换关系。

2.不同进制之间的转换原理:讲解如何将一个进制数转换为另一个进制数,包括位权展开、除以进制数等方法。

3.进制转化的实际应用:通过举例和练习题,让学生学会运用进制转化方法解决实际问题,如计算机中的二进制运算、电子密码的生成等。

三、教学方法为了实现教学目标,本章节将采用以下几种教学方法:1.讲授法:教师通过讲解进制转化的基本概念和方法,引导学生理解不同进制之间的转换原理。

2.案例分析法:通过分析具体的实例,让学生学会运用进制转化方法解决实际问题,培养他们的应用能力。

3.实验法:学生进行进制转化的实验,让他们亲自动手操作,加深对进制转化的理解和掌握。

四、教学资源为了支持教学内容和教学方法的实施,本章节将准备以下教学资源:1.教材:提供一本关于进制转化的教材,为学生提供系统的理论知识学习。

2.参考书:提供一些关于进制转化的参考书籍,供学生进一步深入学习和研究。

3.多媒体资料:制作一些关于进制转化的多媒体课件和教学视频,通过动画和图片等形式展示进制转化的原理和应用。

4.实验设备:准备一些计算机和电子设备,让学生进行进制转化的实验操作。

五、教学评估本章节的教学评估主要包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估他们的学习态度和积极性。

进制转换c课程设计

进制转换c课程设计

进制转换c 课程设计一、教学目标本节课的教学目标是让学生掌握进制转换的基本概念和方法,包括十进制、二进制、八进制和十六进制的相互转换。

学生应该能够理解不同进制之间的换算关系,并能运用所学的知识进行实际的进制转换。

此外,学生还应该培养逻辑思维能力和解决问题的能力,通过解决具体的进制转换问题,提高对计算机科学和编程的兴趣。

二、教学内容本节课的教学内容主要包括进制转换的基本概念和方法。

首先,介绍十进制、二进制、八进制和十六进制的基本概念,解释它们之间的换算关系。

然后,讲解如何进行不同进制之间的转换,包括十进制转二进制、二进制转十进制、八进制转十六进制、十六进制转八进制等。

最后,通过具体的例子和练习题,让学生进行实际的进制转换练习,巩固所学的知识。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。

首先,通过讲授法,向学生讲解进制转换的基本概念和方法。

然后,通过讨论法,引导学生进行思考和交流,解答他们在学习过程中遇到的问题。

接着,通过案例分析法,分析具体的进制转换案例,让学生理解进制转换的实际应用。

最后,通过实验法,让学生亲自动手进行进制转换的练习,提高他们的实际操作能力。

四、教学资源为了支持教学内容和教学方法的实施,本节课将选择和准备适当的教学资源。

教材将是主要的教学资源,用于提供基本的知识和概念。

参考书将用于提供更多的例子和实践题,帮助学生巩固所学的知识。

多媒体资料将用于展示进制转换的动画和图表,帮助学生更好地理解进制转换的过程。

实验设备将用于让学生进行实际的进制转换练习,提高他们的操作能力。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面客观地评价学生的学习成果。

首先,将根据学生在课堂上的表现,包括参与讨论、提问回答等,给予平时表现评分。

其次,将布置相关的作业,要求学生完成进制转换的练习题,通过作业评分来评估学生的理解程度和实践能力。

最后,将安排一次小测验或考试,包括选择题、填空题和计算题等,以检验学生对进制转换知识的掌握情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;}。

相关文档
最新文档