数据结构课程设计报告进制转换Word文档下载推荐.docx
- 文档编号:19116076
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:14
- 大小:37.85KB
数据结构课程设计报告进制转换Word文档下载推荐.docx
《数据结构课程设计报告进制转换Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告进制转换Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
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进制之间的相互转化(数组方法)
#include<
iostream.h>
math.h>
//#include<
stdio.h>
#defineN100
#definemax_num10
inty,n,s;
intm,r,x;
voidten_else(intg,inth)//十进制数转换为其他进制数
{
intc[N],mod;
inti=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])
case10:
cout<
<
"
A"
;
break;
case11:
B"
case12:
C"
case13:
D"
case14:
E"
case15:
F"
default:
c[j];
/*voidten_else(intg,inth)//十进制数转换为其他进制数
if(c[j]<
=9)
cout<
else
printf("
%c"
('
A'
+(c[j]-10)));
//cout<
('
+(c[j]-9));
*/
voidmain()
请输入任意进制M:
cin>
>
m;
if(m<
10)//2~9进制转换成10进制
chars[max_num];
intk,z=0,j=0;
//z存储十进制数,j表示输入m进制数的位数。
for(inti=0;
i<
max_num;
i++)
s[i]='
u'
cout<
请输入一个"
m<
进制数:
cin>
s;
for(i=1;
i++)
if(s[i]!
='
)j++;
k=j;
//保存输入位数
for(i=0;
j;
i++)
z=z+(s[i]-'
0'
)*(pow(m,--k));
转换后的10进制数MD为:
z<
endl;
请输入需要转换成的进制(非M):
r;
输出转换成"
r<
进制的结果:
ten_else(z,r);
elseif(m<
=16&
&
m>
=11)//11~16进制转换成10进制
//z存储十进制数,j表示输入16进制数的位数。
{
if(s[i]>
s[i]<
F'
)
z=z+(s[i]-'
+10)*(pow(m,--k));
a'
f'
9'
}
转换后的10进制数为:
elseif(m==10)//十进制转换成其它进制
intx;
请输入一个10进制数:
x;
if(r<
=10)
{
ten_else(x,r);
}
//实现1~16进制之间的相互转化(堆栈方法)
#include<
enumerror_code{success,overflow,underflow};
constmaxlen=100;
inta,n,h;
classstack
public:
stack();
boolempty()const;
boolfull()const;
error_codeget_top(int&
x)const;
error_codepush(intx);
error_codepop();
intseesize(){returncount;
private:
intcount;
intdata[maxlen];
};
//初始化链栈
stack:
:
stack()
count=0;
boolstack:
empty()const//判断栈是否为空
if(count==0)returntrue;
returnfalse;
error_codestack:
get_top(int&
x)const//取栈顶元素
if(empty())returnunderflow;
else
x=data[count-1];
returnsuccess;
push(intx)//入栈
if(full())returnunderflow;
data[count]=x;
count++;
returnsuccess;
pop()//出栈
count--;
full()const{
if(count==maxlen)returntrue;
voidten_else(intg,inth)//十进制数g转换为其他进制(h进制)数
inta,x;
intmod;
stacks;
mod=g%h;
if(mod>
9)
a=mod+55;
if(a>
=65)
switch(a-55)
case10:
cout<
break;
case11:
case12:
case13:
case14:
case15:
default:
s.push(a);
s.push(mod);
g=g/h;
if(g>
0)ten_else(g,h);
while(!
s.empty())
s.get_top(x);
s.pop();
intmain()
intm,a,z,sum;
inti=1;
intj=0;
sum=0;
请输入任意进制M(1~16):
请输入"
进制的数:
if(m==10)
10进制数MD即为:
x<
输入最终转化的进制(非M):
h;
ten_else(x,h);
10)
{
while(x!
a=x%10;
x=x/10;
while(!
s.get_top(z);
sum=sum+z*pow(m,s.seesize()-1);
s.pop();
转换的10进制数为:
sum<
ten_else(sum,h);
charx;
intj=0;
do{
cin>
if(x!
.'
)s.push(x);
}while(x!
);
if(z<
if(z>
sum=sum+z*pow(m,j);
j++;
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 转换