1.实验题目
运用栈进行数制转换。
2.需求分析
用C编写完成:对于输入的任意一个非负十进制整数,输出与其等值的其他进制数。
3.概要设计
由于运行过程是从低位到高位顺序产生进制数的各个数位,而输出应从高位到底位进行,这和计算过程相反,恰好可以运用栈把进制数的各位顺序入栈,而按出栈序列输出,即为对应转换的进制数。
4.详细设计
1)先对栈定义:
Typedef struct{ SElemType *base; SElemType *top; int stacksize; }Stack;
2)构造一个栈:
int InitStack(Stack &S)//初始化栈
{ S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; }
3)分别进行入栈和出栈操作,再进行进制转换。
5.调试分析
#include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OK 1 #define ERROR 0 //栈定义 typedef struct { int *base; int *top; int stacksize; }Stack; int InitStack(Stack &S)//初始化栈 { } int push(Stack &S,int e)//入栈 { if(S.top-S.base>=S.stacksize) //栈满 S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } { } *S.top++=e; return 1; S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; int pop(Stack &S,int &e)//出栈 { } void conversion(int n,int m)//n为十进制数,m为要转换进制 { Stack S; InitStack(S); while(n!=0) { } push(S,n%m); n=n/m; if(S.top==S.base) return ERROR;//栈空 e=* --S.top; return OK; } while(S.top!=S.base) { } int x; pop(S,x); printf(\"%x\ int main() { } int n,m; printf(\"请输入一个十进制正整数:\"); scanf(\"%d\ printf(\"\\n输入要转换进制:\"); scanf(\"%d\if(m<2) { } conversion(n,m); printf(\"\\n\"); return OK; printf(\"输入不合法!请输入大于1的进制!\"); printf(\"\\n\"); return ERROR; 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务