- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实用文档
实用文档
文案大全
文案大全
《数据结构》
课 程 设 计 报 告 书
题 目:数制转换
系 别:计算机科学与应用系学 号:
学生姓名: 指导教师:
完成日期:2013—6—1
数制转换
需求分析
任意给定一个M 进制的数x ,实现如下要求
求出此数x 的 10 进制值(用MD 表示)
实现对x 向任意的一个非M 进制的数的转换。
至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。
概要设计
程序流程可以用以下流程图来刻画:
A 用数组实现 B 用栈实现
开始构造数组
开始
构造数组
数制转换函
数
输出结果
开始
创建栈
数制转换函
数
输出结果
详细设计
用数组实现该问题
D2M()函数和 M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数 x 首先对需要转换的进制 M 取余,然后在对其取整, 接着通过递归调用 D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而 M2D()函数是实现其他进制 M 转换为十进制,并将其转换为非 M 进制。M 进制转十进制则是从该 M 进制数的
最后一位开始运算,依次列为第 0、1、2、……..N 位并分别乘以 M 的 0、1、2、…..N 次方,将得到的次方相加便得到对应的十进制数,再调用 D2M()函数将其转换为非M 进制的数。
用栈实现
栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。
调试分析
构造栈的方法通过查阅书籍知道了。
数组的递归调用查阅相关书籍了解了。
为了让界面表达更清晰,多次调试完善了界面。
测试结果
下面是我的测试函数及运行结果:
数组测试结果
B 栈实现测试结果
总结
通过《数据结构》课程设计,我了解到数据结构是计算机科学中一门综合性的专业基础课。这次的课程设计使我对数组及栈有了初步的认识,虽然课程设计的不完善,但是在设计过程中我受益匪浅,通过查资料、网上搜索例子,让我学到了很多以前不知道的东西,提高我的分析和解决问题的能力,进一部掌握了应用系统设计的方法和不步骤,,也让我意识到自己所掌握的实在是太少了,只靠课本知识是不够的,应该多多上机调试,这样才能提高自己。
附源程序
数组实现#includestdio.h #includemath.h #define N 1000 int i,j,y,n,s; int m,r,reminder;
int x; //全局变量默认初始化为 0,不必再赋 0 了
D2M(int g,int h) // 十进制数转换为其他进制数
{
int c[N]; i=0;
reminder=g%h; g=g/h; if(reminder9)
{
c[i]=reminder+55; i++;
}
else
{
c[i]=reminder; i++;
}
if(g0) D2M(g,h);
for(j=i-1;j=0;j--) if(c[j]=65) printf(%c,c[j]); else
printf(%d,c[j]); return 0;
}
M2D(int e) // 二进制和八进制数转换为十进制数 ,并这转换为其他进制数
{
int a[N];
printf(请输入%d 进制位数:,m);
scanf(%d,n);
printf(请输入%d 进制的每位并使每位用空格隔开:,m); for(i=0;in;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;
}
H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数
{
int b[N];
printf(请输入%d 进制位数:,m);
scanf(%d,n);
printf(请输入%d 进制的每位并使每位用空格隔开:,m); for(i=0;in;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 进制
原创力文档


文档评论(0)