用栈实现进制转换.doc_第1页
用栈实现进制转换.doc_第2页
用栈实现进制转换.doc_第3页
用栈实现进制转换.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

_用栈实现进制转换学院、专业:应用数学学院10信计二班 姓名:林桂鑫学 号 :3110008332目标:利用栈将十进制数字转换分别转换为二进制、八进制、十六进制数字。所遇问题: 1:进行进制转换时所用的数学原理; 2:要为用户实现怎样的使用界面;问题的解决: 1:进行选择时,应用了除商取余法; 2:分别构造了将十进制转换为二进制、八进制、十六进制三个函数,再主函数 中应用switch函数进行选择,用户可选择将所输入的十进制数字转换为二进制、八进制或十六进制;解题过程:1:对栈的顺序存储进行表示:struct SqStack SElemType *base; /栈底指针,空栈时其值为NULL SElemType *top; /栈顶指针 int stacksize; /当前已分配的存储空间 ;2:输入编写程序所需要调用的关于顺序栈的基本操作:Status InitStack(SqStack &S) S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; ;Status Push(SqStack &S,SElemType e) if (S.top-S.base=S.stacksize) S.base=(SElemType *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK;Status GetTop(SqStack S,SElemType &e) if (S.top=S.base) exit(ERROR); else e=*(S.top-1); return OK;Status StackEmpty(SqStack S) if (S.top=S.base) return TRUE; else return FALSE; Status Pop(SqStack &S,SElemType &e) if (S.top=S.base) exit(ERROR); else e=*(-S.top); return OK;Status DestroyStack(SqStack &s)free(s.base);s.base=NULL; s.top=NULL;s.stacksize=0;return OK;Status ClearStack(SqStack &S)S.top=S.base;return OK;int 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; /定义栈结构S InitStack ( S ) ; /初始化栈S scanf(%d,&N); /输入十进制正整数 while (N) Push( S , N%2 ); /余数入栈 N/=2; /被除数data整除以2,得到新的被除数 while ( !StackEmpty(S) ) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(%d, N ); void Decimal_Binary8 ( )int N; SqStack S; /定义栈结构S InitStack ( S ) ; /初始化栈S scanf(%d,&N); /输入十进制正整数 while (N) Push( S , N%8 ); /余数入栈 N/=8; /被除数data整除以2,得到新的被除数 while ( !StackEmpty(S) ) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(%d, N ); void Decimal_Binary16 ( ) int N; SqStack S; /定义栈结构S InitStack ( S ) ; /初始化栈S scanf(%d,&N); /输入十进制正整数 while (N) Push( S , N%16 ); /余数入栈 N/=16; /被除数data整除以2,得到新的被除数 while ( !StackEmpty(S) ) /依次从栈中弹出每一个余数,并输出之 Pop( S , N ); printf(%d, N ); 4:在主函数中应用switch函数进行操作选择: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后输入十进制数可依次完成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论