



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用栈实现进制转换学院、专业:应用数学学院10信计二班姓名:林桂鑫号 :3110008332目标:利用栈将十进制数字转换分别转换为二进制、八进制、十六进制数字。 所遇问题:1:进行进制转换时所用的数学原理;2:要为用户实现怎样的使用界面;问题的解决:1:进行选择时,应用了除商取余法;2:分别构造了将十进制转换为二进制、八进制、十六进制三个函数,再主函 数中应用switch函数进行选择,用户可选择将所输入的十进制数字转换为 二进制、八进制或十六进制;解题过程:1:对栈的顺序存储进行表示:struct SqStack /栈底指针,空栈时其值为NULL/栈顶指针/当前已分配的存储空间SElemType
2、 *base;SElemType *top; int stacksize;2:输入编写程序所需要调用的关于顺序栈的基本操作:Status In itStack(SqStack &S)S.base = (SElemTy pe *)malloc(STACK_INIT_SIZE * sizeof(SElemTy pe);if(!S.base) exit(OVERFLOW);S.t op=S.base;S.stacksize=STACK_INIT_SIZE;return OK;Status Push(SqStack & S,SElemT ype e)if (S.t op-S.base&
3、gt;=S.stacksize) S.base=(SElemTy pe *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SEIemTy pe); if(!S.base) exit(OVERFLOW);S.t op=S.base+S.stacksize;S.stacksize+=STACKINCREMENT; *S.t op+=e;return OK;Status GetTo p( SqStack S,SEIemT ype &e)if (S.to p=S.base) exit(ERROR);else e=*(S.t op-1);r
4、eturn OK;Status StackE mp ty(SqStack S)if (S.t op=S.base) return TRUE; else return FALSE;Status Pop (SqStack & S,SElemT ype &e)if (S.to p=S.base) exit(ERROR);else e=*(-S.to p);return OK;Status DestroyStack(SqStack &s) free(s.base);s.base=NULL;s.to p=N ULL;s.stacksize=0;return OK;Status C
5、learStack(SqStack &S)S.t op=S.base;return OK;int stackLe ngth(SqStack S)retur n S.t op-S.base;Status StackTraverse(SqStack S,Status(*visit)(SEIemTy pe)while(S.t op >S.base) visit(*S.base+); prin tf("n"); return OK;3:构造三个分别解决将十进制转换为二进制、八进制、十六进制的函数:void Decimal_B in ary2 ()/定义栈结构S/初始化
6、栈S/输入十进制正整数int N;SqStack S;In itStack ( S );scan f("%d",&N);while (N)Push( S , N%2 );/ 余数入栈NI=2;while ( !StackE mp ty(S)II被除数data整除以2,得到新的被除数/依次从栈中弹出每一个余数,并输出之 Pop( S , N );prin tf("%d", N );void Decimal_B in ary8 ()II定义栈结构SII初始化栈SII输入十进制正整数int N;SqStack S;In itStack ( S );sc
7、an f("%d",&N);while (N)Push( S , N%8 ); II 余数入栈NI=8;II被除数data整除以2,得到新的被除数while ( !StackE mp ty(S)II依次从栈中弹出每一个余数,并输出之 Pop( S , N ); prin tf("%d", N );void Decimal_Bi nary16 ()II定义栈结构SII初始化栈SII输入十进制正整数int N;SqStack S;In itStack ( S );scan f("%d",&N);while (N) Push
8、( S , N%16 ); II 余数入栈NI=16;II被除数data整除以2,得到新的被除数while ( !StackE mp ty(S)II依次从栈中弹出每一个余数,并输出之 Pop( S , N );prin tf("%d", N );4:在主函数中应用switch函数进行操作选择:void mai n()int comma nd;printf(”请对进制转换进行选择1转换为二进制2转换为八进制 3转换为十六进制n,选择完毕后请输入你要转换的数字”);cin> >comma nd;switch (comma nd)case 1:Decimal_B in ary2 ( );break;case 2:Decimal_B in ary8 ( );break;case 3:Decimal_B in ary16 ( );break;default:cout<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论