完整的程序代码如下: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define OK 1 #define ERROR -1 #define FALSE 0 #define TRUE 1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; typedef struct { int *base; int *top; int stacksize; }SqStack; Status InitStack(SqStack &S); //构造空栈 Status StackEmpty(SqStack &S); //判断栈是否空,若空,返回TRUE,否则返回FALSEE Status Push(SqStack &S, int e); //插入元素e为新的栈顶元素 Status Pop(SqStack &S, int &e); //若栈不空,则删除S的栈顶元素,并用e返回其值,并返回OK;否则返回ERROR void conversion (); //十进制转化成八进制函数 Status InitStack(SqStack &S) { S.base = (int *) malloc (STACK_INIT_SIZE * sizeof(int)); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } //InitStack Status StackEmpty(SqStack &S) { if(S.top == S.base) return TRUE; else return FALSE; } //StackEmpty Status Push(SqStack &S, int e) { if(S.top - S.base >= S.stacksize) { S.base = (int *) realloc(S.base,(S.stacksize+STACKINCREMENT) * sizeof(int)); if(!S.base) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; return OK; } //Push Status Pop(SqStack &S, int &e) { if(S.top == S.base ) return ERROR; e = * --S.top; return OK; } //Pop void conversion () { int N ,e; SqStack S; InitStack(S); printf("请输入十进制数:"); scanf("%d",&N); int M = N; while(N) { Push(S,N%8); N = N/8; } printf("%d转化成8进制数为:",M); while (!StackEmpty(S)) { Pop(S,e); printf("%d",e); } printf("/n"); }//conversion void main () { conversion(); } 解析: 利用栈的先进后出的特性则很好的实现了此次数制的转换。