回 帖 发 新 帖 刷新版面

主题:[讨论]数制转换问题,帮帮忙找错误

我编了个10进制数转为其他进制数的程序,可执行不了,请各位高手请教一下
#define maxsize 100
#include <malloc.h>
#include <stdio.h>
#define true   1
#define false  0
#define ok     1
#define error  0
#define infeasible  -1
#define overflow    -2
#define NULL   0
//函数结果状态代码

typedef int status;
//status是函数的类型,其值是函数结果状态代码

#include "kk.h"
#define maxsize 100

typedef struct
{ int *elem;  /*栈的存储区*/
  int max;    /*栈的容量,即栈中最多能存放的元素个数*/
  int top;    /*栈的指针*/
}stack;


int initstack(stack*s,int n)    /*创建容量为n的空栈*/
{ s->elem = (int*)malloc(n*sizeof(int));
  if (s->elem == NULL) return -0;
  s->max = n;
  s->top = 0;
  return 1;
}

int push(stack*s,int item)    /*将整数item压入栈顶*/
{if (s->top == s->max)
{printf("stack is full!\n"); return 0;}
s->elem[s->top++] = item;     /*将top指针加1,两步合并后写为s->elem[s->top++]*/
return 1;
}

int stackEmpty(stack s)        /*判断栈是否为空*/
{ return ((!s.top) ? 1:0);}
int top(stack  *s)             /*栈顶元素出栈*/
{ if (!s->top)
  { printf("top an enpty stack!\n"); return 0; }
return s->elem[--s->top];      /*将top指针减1,两步合并后写为s->elem[--s->top]*/
}

void MultibaseOutput ( long n, int B)
{int m; stack S;
if ( initstack(&S, maxsize))  
     { printf("Failure!\n"); return;}
do { if(push(&S, n%B))
     { printf("failure!\n"); return;}    
   n = n/B; 
}while (n !=0);

while ( !stackEmpty(S))
     {  m = top(&S);
      if (m < 10)
          printf("%d",m);
      else printf("%c",m+55);
}
printf("\n");
}

回复列表 (共3个回复)

沙发

算法没什么问题,你的那个top没看到定义啊,一般top是只取栈顶元素,而弹栈是pop,取栈顶元素同时删除它。

板凳

经过修改,得出了最后的程序
可以用了
#define maxsize 100
#include <malloc.h>
#include <stdio.h>
#define true   1
#define false  0
#define ok     1
#define error  0
#define infeasible  -1
#define overflow    -2
#define NULL   0
//函数结果状态代码

typedef int status;
//status是函数的类型,其值是函数结果状态代码


#include "kk.h"
#define maxsize 100

typedef struct
{ int *elem;  /*栈的存储区*/
  int max;    /*栈的容量,即栈中最多能存放的元素个数*/
  int top;    /*栈的指针*/
}stack;


int initstack(stack*s,int n)    /*创建容量为n的空栈*/
{ s->elem = (int*)malloc(n*sizeof(int));
  if (s->elem == NULL) return -0;
  s->max = n;
  s->top = 0;
  return 1;
}

int push(stack*s,int item)    /*将整数item压入栈顶*/
{if (s->top == s->max)
{printf("stack is full!\n"); return 0;}
s->elem[s->top++] = item;     /*将top指针加1,两步合并后写为s->elem[s->top++]*/
return 1;
}

int stackEmpty(stack s)        /*判断栈是否为空*/
{ return ((!s.top) ? 1:0);}
int pop(stack  *s)             /*栈顶元素出栈*/
{ if (!s->top)
  { printf("pop an enpty stack!\n"); return 0; }
return s->elem[--s->top];      /*将top指针减1,两步合并后写为s->elem[--s->top]*/
}

void MultibaseOutput ( int n, int B)
{int m; stack S;
if ( initstack(&S, maxsize))   
     
do { if(push(&S, n%B));
     
n = n/B; 
}while (n !=0);
while ( !stackEmpty(S))
     {  m = pop(&S);
      if (m < 10)
          printf("%d",m);
      else printf("%c",m+55);
}
printf("\n");
}

main()
{int n,B;
printf("n=");
scanf ("%d",&n);
printf("\nB=");
scanf ("%d",&B);
MultibaseOutput (n,B);
}

3 楼

看看行不行?

#include"malloc.h"
#include"stdio.h"
#define MAX 225
typedef struct
{int q[MAX];
int top;
}list;

 void creat(list *p)
{if(!p)
    printf("错误!\n");
p->top=-1;
}


int into(list *j, int x)
{if(j->top<MAX-1)
{j->top=j->top+1;
j->q[j->top]=x;

}
else
    printf("溢出。\n");


}



int put(list *r)
{int x;
if(r->top!=-1)
{x=r->q[r->top];
r->top=r->top-1;
return(x);
}
else
    return(-1);
}



int yushu(int m)
{int s,h,n,k,y;list *p;
p=(list *)malloc(sizeof(list));
creat(p);
printf("请输入要转换的数:\n");
scanf("%d",&s);
do
{n=s;
s=s/m;
k=n%m;
into(p,k);
}while(s);
printf("10->%d进制数为:\n",m);
printf("\n");
do
{
y=put(p);
if(y>9)
printf("%c",y+87);
else if(y==-1)
break;
else
printf("%c",y+48);
}
while(y!=-1);
}




main()
{ int i;
int fage;
fage=1;
do{printf("\n");
printf("\t******主菜单******\n");
printf("\t1-----------10->16\n");
printf("\t2-----------10->8\n");
printf("\t3-----------10->2\n");
printf("\t0-----------finish.\n");
printf("\t===================\n");
printf("请选择:\n");
scanf("%d",&i);
switch(i)
{case 0:fage=0;break;
case 1:yushu(16);break;
case 2:yushu(8);break;
case 3:yushu(2);break;
default:printf("选择错误。请重新选择。\n");

    }

}while(fage);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册