- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
##大学
数据结构课程设计报告
题目: 数值转换
院(系): 计算机工程学院
学生姓名:
班级: 学号:
起迄日期: 6月16号到6月30号
指导教师:
20XX—20XX年度 第 2 学期
一、需求分析
1.问题描述:
任意给定一个M进制的数x ,请实现如下要求
1) 求出此数x的10进制值(用MD表示)
2) 实现对x向任意的一个非M进制的数的转换。
3) 至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。
算法设计说明存储结构的
画出函数之间的调用关系图。
四、 调试分析
调试分析:
实际完成的情况说明(完成的功能,支持的数据类型等);
可以完成M进制数X到其他进制数的转换
程序的性能分析,包括时空分析;
程序的时间复杂度为o(n),空间复杂度为0(1);
上机过程中出现的问题及其解决方案;
实验过程中要在数组方法中出现问题:保存余数的数组char a[1000]要都赋予值0,否则在
倒序的是否会因为系统自动分配的未知数值出现问题char a[1000]。
本来结果应该是2A结果却是 烫2A。
问题2.在把其他进制数转换成十进制数的时候,1到9的ASCII值(t=a[i]-48)与ABCF字符的ASCII码(t=a[i]-55)的值有区别,
本应该转换成的十进制数是159,但却等于156,所以要分开对待。
程序中可以改进的地方说明;
试验中还是又可以改进的地方的,例如把小数转化的部分加进去。增强程序的容错性主要在输入输出方面
程序中可以扩充的功能及设计实现假想。
可以直接实现把M进制数转换成N进制数,而不是通过十进制这个桥梁。
五、测试结果
栈方法:
递归方法:
.用户手册:
用visual C打开源文件,按ctrl+F7,进行编译,再按ctrl+F5运行,会出现
一个界面
再按菜单操作及可
七.体会与自我评价
实验设计中我学到了模块化处理问题,找到问题,并一个个解决,例如把三种方法封装在三个函数中。但在也存在着一些问题主要是16进制上,它包括一些AB等一些字母,所以要进行特别处理。例如在十进制的转化中要分开处理
if(a[i]=57)//比较大小都要换成整型的
t=a[i]-48;
else
t=a[i]-55;
if(i==n-1)
}
解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放。数组的每个元素分别存储它的一位数字。然后按位转换求和,得到十进制表示;再十进制表示转换成所求的数制表示。转换的结果也用一个字符型数组表示,每个元素表示换结果的一位数字。根据数制表示中相邻位的基数关系,可以把不同的数制分成两类。一类数制表示中,相邻位的基数是等比关系,例如我们熟悉的十进制表示。另一类数制表示中,相邻位的基数不等比的。例如在时间表示中,从秒到分采用60 进进制;从月到年采用12 进制。把一个数值从数制B 的表示bmbm-1b m-2 ... b1 转换成十进制表示dnd n-1d n-2 ... d1 比较简单。假设数制中,第i 位的基数为basei(1 ? i ? m),直接把basei 与bi 相乘,然后对全部乘积求和。从十进制表示dnd n-1d n-2 ... d1 到bmbm-1b m-2 ... b1 的转换需要分两种情况考虑:数制 中相邻数字的基数是等比关系,即:basei(m)可以表示成Ci-1,其中C 是一个常量。将dnd n-1d n-2 ... d1 除以C,余数即为b1;将dnd n-1d n-2 ... d1 和C 相除的结果再除以,余数即为b;… ;直至计算出为bm 止。 数制 中相邻数字的基数不等比。需要先判断dnd n-1d n-2 ... d1 在数制中需要的位数,然后从高位到低位依次计算bm、bm-1、b m-2、...、b1。
#include iostream
using namespace std;
#includestring
#includemalloc.h
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
int *base;
int *top;
int stacksize;
}stack;
////////////////////////////////
int getdex()
{
char a[50];
int n,j,i,sum=0,t=0,p=1;int x;
printf(输入要转化M进制数: );
scanf(%d,x);
pri
文档评论(0)