第六次上机作业
实验名称:栈、队列的应用 ----数制转换
实验目的:熟悉栈、队列的基本操作,学会用栈、队列解决实际问题。
(1)编写程序完成十进制整数向 r(二、八、十六)进制整数的转换。(必做)
(2)对上题功能进行完善,同时完成小数之间的转换。 (选做)
提示:
第 1题借助栈实现,第 2
题借助队列实现。
实验内容:
提示:
十进制整数 num向 r进制转换的方法为:
num重复除以 r取余,直至商为 0,取得的余数倒排,即得到相应的二进制整数。
可借助栈存放所有取得的余数,之后依次让所有余数出栈,保证余数存取的后进先出。
实现整数转换功能的程序可由三个程序单位构成:
( 1)入栈函数:实现将一个余数 x入栈。
void push(stacktype *s,int x)
( 2)出栈函数:实现将栈顶元素出栈。
int pop(stacktype *s)
( 3)主程序:对输入的十进制整数 num不断除以 r,
直到商为 0,取得的余数依次入栈;当入栈全部完成之后,将栈中所有余数依次出栈并输出就得到了转换后的结果。
注意:若要转换为 16进制的数,当出栈的余数为
10-15时,应将其变为 A-F输出。
主程序的框架为:
void main()
{输入待转换的整数 num和待转换的进制 r
被除数 m初值赋为 num
初始化空栈
while( m不为 0)
{ 求出 m除以 r的余数 x
调用 push子程序将 x入栈
m重新赋值为原来 m除以 r的商(更新被除数)
}
while(栈不为空 )
{ 调用函数 pop将余数依次出栈,出栈元素保存在 y中输出余数 y对应的数位 (只对于 16进制余数为 10-15时进行必要处理)
}
}