1、用栈实现进制转换学院、专业:应用数学学院 10 信计二班 姓名:林桂鑫学 号 :3110008332目标:利用栈将十进制数字转换分别转换为二进制、八进制、十六进制数字。所遇问题: 1:进行进制转换时所用的数学原理;2:要为用户实现怎样的使用界面;问题的解决: 1:进行选择时,应用了除商取余法;2:分别构造了将十进制转换为二进制、八进制、十六进制三个函数,再主函数 中应用 switch 函数进行选择,用户可选择将所输入的十进制数字转换为二进制、八进制或十六进制;解题过程:1:对栈的顺序存储进行表示:struct SqStack SElemType *base; /栈底指针,空栈时其值为 NULL
2、SElemType *top; /栈顶指针int stacksize; /当前已分配的存储空间;2:输入编写程序所需要调用的关于顺序栈的基本操作:Status InitStack(SqStack if(!S.base) exit(OVERFLOW); S.top=S.base;S.stacksize=STACK_INIT_SIZE; return OK; ;Status Push(SqStack if(!S.base) exit(OVERFLOW);S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT; *S.top+=e; return O
3、K;Status GetTop(SqStack S,SElemType else e=*(S.top-1);return OK;Status StackEmpty(SqStack S)if (S.top=S.base) return TRUE;else return FALSE;Status Pop(SqStack else e=*(-S.top);return OK;Status DestroyStack(SqStack s.base=NULL; s.top=NULL;s.stacksize=0;return OK;Status ClearStack(SqStack return OK;in
4、t stackLength(SqStack S)return S.top-S.base;Status StackTraverse(SqStack S,Status(*visit)(SElemType)while(S.topS.base)visit(*S.base+);printf(“n“);return OK;3:构造三个分别解决将十进制转换为二进制、八进制、十六进制的函数:void Decimal_Binary2 ( ) int N;SqStack S; /定义栈结构 SInitStack ( S ) ; /初始化栈 Sscanf(“%d“, /输入十进制正整数while (N) Push(
5、 S , N%2 ); /余数入栈N/=2; /被除数 data 整除以 2,得到新的被除数while ( !StackEmpty(S) ) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(“%d“, N );void Decimal_Binary8 ( )int N;SqStack S; /定义栈结构 SInitStack ( S ) ; /初始化栈 Sscanf(“%d“, /输入十进制正整数while (N) Push( S , N%8 ); /余数入栈N/=8; /被除数 data 整除以 2,得到新的被除数while ( !StackEmpty(S)
6、) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(“%d“, N );void Decimal_Binary16 ( ) int N;SqStack S; /定义栈结构 SInitStack ( S ) ; /初始化栈 Sscanf(“%d“, /输入十进制正整数while (N) Push( S , N%16 ); /余数入栈N/=16; /被除数 data 整除以 2,得到新的被除数while ( !StackEmpty(S) ) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(“%d“, N );4:在主函数中应用 swi
7、tch 函数进行操作选择:void main() int command;printf(“请对进制转换进行选择 1 转换为二进制 2 转换为八进制 3 转换为十六进制 n,选择完毕后请输入你要转换的数字“);cincommand;switch (command)case 1:Decimal_Binary2 ( );break;case 2:Decimal_Binary8 ( );break;case 3:Decimal_Binary16 ( );break;default:cout“别乱来“;程序测试结果:程序运行后,分别输入 1、2 、3 后输入十进制数可依次完成将十进制数转换为二进制、八进制、十六进制数的操作,我所输入的测试数据为100,结果分别呈现:1100100、144 、100。当输入的操作不符合要求时,显示“别乱来” ,截图如下: