#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int SElemType; typedef struct {
int InitStack(SqStack &S)//初始化 { }
int StackEmpty(SqStack S)//是否为空栈 { }
int GetTop(SqStack S,SElemType &e)//返回栈顶的元素 { }
int Push(SqStack &S,SElemType e)//进栈 {
if(S.top-S.base>=S.stacksize) {
if(S.top==S.base)return 0; e=*(S.top-1); return 1;
if(S.top==S.base)return 1; return 0;
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base)return 0; S.top=S.base;
S.stacksize=STACK_INIT_SIZE; return 1; SElemType *base; SElemType *top; int stacksize;
}SqStack;
S.base=(SElemType
*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
7
}
}
if(!S.base)return 0; S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;
*S.top++=e; return 1;
int Pop(SqStack &S,SElemType &e)//出栈 { }
void PrintStack(SqStack S)//输出栈 {
SElemType e;
while (!StackEmpty(S)) {
if(S.top==S.base)return 0; e=*--S.top; return 1;
Pop(S,e);
printf (\"%d \ }
printf(\"\\n\"); }
int conversion (int Num,int n) //进制转化 {
SElemType e; SqStack S;
InitStack(S); // 构造空栈 if(Num<0)return 0; while (Num) { Num = Num/n; } switch(n) {
case 2:printf(\"转换成的二进制整数为:\\n\");break; case 8:printf(\"转换成的八进制整数为:\\n\");break;
//向堆栈中逐个存入余数
Push(S, Num % n);
8
case 16:printf(\"转换成的十六进制整数为:\\n\");break; default:return 0; } }
else while (!StackEmpty(S)) {//逆序输出余数,得到转换后的数制 Pop(S,e); printf (\"%d\ }
printf(\"\\n\"); return 1; } main(){
int i,n; SqStack S; InitStack(S);
if(n==16){//当转换成十六进制时,需要把10-15换成对应的A-F输出
while (!StackEmpty(S)) { Pop(S,e); switch(e) }
{ case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
case 9:printf (\"%d\case 10:printf (\"A\");break; case 11:printf (\"B\");break; case 12:printf (\"C\");break; case 13:printf (\"D\");break; case 14:printf (\"E\");break; case 15:printf (\"F\");break; }
9
SElemType e=1;
printf(\"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\\n\");
printf(\"\");
printf(\"* 请输入以下数字执行相应程序: *\\n\");
printf(\"* [1]:十进制数转换为二进制 *\\n\");
printf(\"* [2]:十进制数转换为八进制 *\\n\");
printf(\"* [3]:十进制数转换为十六进制 *\\n\");
printf(\"* [4]:退出程序 *\\n\");
printf(\"\");
printf(\"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\\n\");
10
int keyL=1;
while(keyL<4&&keyL>0){
printf(\"\\n请输入数字执行相应程序[ ]\\b\\b\"); scanf(\"%d\fflush(stdin); if(keyL==1){ }
else if(keyL==2){ }
printf(\"\\n请输入一个非负十进制整数:\"); scanf(\"%d\
while(!conversion(e,8)){ }
printf(\"\\n输入错误!请重新输入一个非负十进制整数:\"); scanf(\"%d\
printf(\"\\n请输入一个非负十进制整数:\"); scanf(\"%d\
while(!conversion(e,2)){ }
printf(\"\\n输入错误!请重新输入一个非负十进制整数:\"); scanf(\"%d\
}
}
else if(keyL==3){ }
fflush(stdin);
printf(\"\\n请输入一个非负十进制整数:\"); scanf(\"%d\
while(!conversion(e,16)){ }
printf(\"\\n输入错误!请重新输入一个非负十进制整数:\"); scanf(\"%d\
七. 程序调试
测试输入数据:20
程序运行正确了,运行如下: 显示输出如图:
11