文档介绍:题目:数制转换问题需求分析将十进制数N转换成八进制数是计算机实现计算的基本问题,解决方案很多,其中最简单的方法是除8取余法。本方案采用顺序栈的方式模拟整个过程。其原理如下:例子:(1348)10=(2504)8N Ndiv8 Nmod8 1348 168 4 168 21 0 21 2 5 2 0 2 从中可以看出,最先产生的余数4是转换加过的最低位,这正好符合栈的“后进先出”的特性。功能:从键盘输入任意一个非负十进制整数,输出与其等值的八进制数;若输入一个负数,则显示输入错误,请重新输入。测试数据:(1348)10=(2504)8,(0)10=(0)8,(-1234)10输入数据错误。概要设计定义顺序栈类型,由键盘输入非负十进制整数N,执行以下循环操作:N%8入栈,N=N/8,直至N=0。主要函数由建立空栈Initsqstack()、入栈Push()、出栈Pop()和main()函数组成。 过程中函数调用关系图如下:详细设计数据类型定义structSqstack{ int*bottom; int*top; intmaxsize;};(Sqstack&s){ =(int*)malloc(sizeof(int)*20); if(){ =; =20; return1; } elsereturn0;}(Sqstack&s,inte){ *++=e;}(Sqstack&s,int&e){ //出栈 e=*--;}测试分析源程序清单#include<iostream>usingnamespacestd;structSqstack{ int*bottom; int*top; intmaxsize;};intInitsqstack(Sqstack&s){ //建立空栈 =(int*)malloc(sizeof(int)*20); if(){ =; =20; return1; } elsereturn0;}voidPush(Sqstack&s,inte){ //入栈 *++=e;}voidPop(Sqstack&s,int&e){ //出栈 e=*--;}intStackEmpty(Sqstack&s){ //判断是否为空栈 if(==) return1; elsereturn0;}intmain(){ Sqstacks; intN,e; Initsqstack(s); cout<<"请输入一个非负十进制整数:"<<endl; cin>>N; if(N<0) cout<<"输入数据错误,请重新输入:"<<endl; elseif(N==0) cout<<"输出对应的八进制数:0"<<endl; else{ while(N){ Push(s,N%8); N=N/8; } cout<<"输出对应的八进制数:"<<endl; while(!StackEmpty(s)){ Pop(s,e); cout<<e; } } cout<<endl; return