数据结构课程设计之任意进制转换.doc
《数据结构课程设计之任意进制转换.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计之任意进制转换.doc(15页珍藏版)》请在三一办公上搜索。
1、大学数据结构课程设计报告题目:数值转换 院(系):计算机工程学院 学生姓名: 班级: 学号:起迄日期: 6月16号到6月30号指导教师: 20XX20XX年度 第 2 学期 一、需求分析 1.问题描述:任意给定一个M进制的数x ,请实现如下要求1) 求出此数x的10进制值(用MD表示)2) 实现对x向任意的一个非M进制的数的转换。3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.基本功能 本程序用三种方法,实现把一个M进制数x转换成其他进制数,分别是数组,递归,栈。1. 把其他进制数转换成十进制包含在一个函数中:int getdex();2. 把十进制转
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这些字符中,输出也是包含在这些字符中。如果
3、输入超过这些范围进行容错处理。二、 概要设计1.设计思路: 把M进制数转换成其他进制数,可以先把M进制数转换成十进制数,调用int getdex();再把十进制数转换成其他进制数(三种方法:数组,递归,栈);最后把这两个步骤结合在一起。封装在三个函数中:void Array(),void Stack(),void Prind();通过switch语句进行选择采用哪种方法转换。 2.数据结构设计: 抽象数据类型栈:ADT Stack 数据对象: D ai | ai ElemSet, i=1,2,.,n, n0 数据关系: R1 | ai-1, aiD, i=2,.,n 约定an 端为栈顶,a1
4、端为栈底。ADT Stack;基本操作:InitStack(&S)操作结果:构造一个空栈 S。Push(&S, e)初始条件:栈 S 已存在。操作结果:插入元素 e 为新的栈顶元素。Pop(&S, &e)初始条件:栈 S 已存在且非空。操作结果:删除 S 的栈顶元素,并用 e 返回其值。3. 软件结构设计:三、 详细设计 1. 定义程序中所有用到的数据及其数据结构,及其基本操作的实现;用到的数据char类型M进制数,typedef structint *base;int *top;int stacksize;stack;基本操作: void array(int N)初始条件:已知一个十进制数操
5、作结果:转换成其他进制数y。int getdex() 初始条件:已知一个M进制数操作结果:转换成十进制数。void prind_d(int n,int c)基本操作:初始条件:已知一个十进制数操作结果:转换成其他进制数y。InitStack(&S)操作结果:构造一个空栈 S。Push(&S, e)初始条件:栈 S 已存在。操作结果:插入元素 e 为新的栈顶元素。Pop(&S, &e)初始条件:栈 S 已存在且非空。操作结果:删除 S 的栈顶元素,并用 e 返回其值。2主函数和其他函数的伪码算法;算法设计说明,存储结构的说明。1. int getdex();把其他进制数转化为十进制数,算法步骤:
6、(1)定义一个字符型的数组char a【50】,用gets()函数输入字符串。把M进制数保存在一个字符串数组当中,例如16进制数2A,(2) 用for循环的嵌套实现转换。从i=n-1开始,执行语句:判断a【i】是否大于57(整数大小的比较),(ai57那么ai-55,因为1到9和A,B,C的Aske码有差别。)从而实现字符向整数的转变。(3) 通过for循环把M进制数的每一位取出来用t保存,倒序取出的先取得A,再取2。(4) P=1,然后嵌套的for循环用来求每一位对应的权。例如A对应的p=0,2的权p=1。用for(j=0;jn-i-1;j+)p=p*x;求p,循环的条件是jn-i-1;(5
7、) 把十进制数用sum存储,sum=sum+t*p;*存储结构说明:物理存储结构是顺序存储结构,逻辑结构是线性结构,主要是采用数组来存储处理M进制数。2. void array(int N);把十进制数转成其他进制数。(1) .定义字符数组char HexNum = 0123456789ABCDEF;char a1000=0; (2) 输入要转化成进制数q;用取余数的方法,把余数存储在数组a1000,实现语句为while语句,(ai=HexNumN%q;i=i+1;N=N/q;)其中十进制数N除以q的余数正好对应数组HexNum 的某一元素,例如42除以16,余下2,对应HexNum 中2,余
8、下10对应数组中的A。(3) 倒序输出余数;定义变量m,存储数组a中余数的元素的个数,用for循环从i=m+1;开始输出也就是从数组a【】中最后一个余数开始输出。直到i=0;*本函数定义了两个数组一个存储1-9,A到F这16个字符的另一个存储10进制数除以q进制数的余数的。3. void prind_d(int n,int c)递归的方法把十进制转换成其他进制数。(1) 定义一个递归函数用switch语句判断转换成的四种情况(2) Case 10,输入十进制数n,判断是否=s.stacksize;如果栈满另外开辟新的空间s.base=(int *)realloc(),并把首地址赋给s.base
9、。栈的栈顶指针为s.top=s.base+s.stacksize;栈的容量变为:s.stacksize+=STACKINCREMENT ;并把新的元素赋给栈顶指针,*s.top=e;栈顶指针加1,s.top =s.top+1。(3) 出栈。While语句判断s.top!=s.base时结束,栈顶指针的值赋给e,然后减1,判断e9是否成立,如果是则以字符的形式输出输出否则以整数的形式输出。4. 封装在三个函数中 Array(),Stack(), Prind()把M进制数转换为其他进制数。(1)Array(),Prind()。输入M进制数x,然后转换成十进制数m,分别再用void array(in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 任意 转换
链接地址:https://www.31ppt.com/p-4264414.html