| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 571 人关注过本帖
标题:在VC6.0中,利用栈实现数制转换,代码有问题,请帮帮忙,谢谢!
只看楼主 加入收藏
洪梅
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-10-23
收藏
 问题点数:0 回复次数:1 
在VC6.0中,利用栈实现数制转换,代码有问题,请帮帮忙,谢谢!
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define STACK_INIT_SIZE  100;
#define STACKINCREMENT   10;

typedef  struct
{
    int   *base;   
    int   *top;
    int   stacksize;
}SqStack;

int InitStack(SqStack  &S)//构造空栈S
{
    S.base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
    if(!S.base)
        exit(0);
    S.base=S.top;
    S.stacksize=STACK_INIT_SIZE;
    return 1;

}//InitStack

int Push(SqStack  &S, int e)//插入元素e为新的栈顶元素
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base = (int *)realloc(S.base,
                  (S.stacksize + STACKINCREMENT) * sizeof(int));
        if(!S.base)
            exit(0);//存储分配失败

        S.top = S.base+S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return 1;
}//Push

int Pop(SqStack  &S, int &e)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
{
    if(S.top == S.base) return 0;
    e = *--S.top;
    return 1;

}//Pop

int StackEmpty(SqStack S)//若栈S为空,则返回TURE;否则返回FALSE
{
    if(    S.base == S.top)
        return 1;
    else
        return 0;
}

void conversion(int n,int m)
{
    int e;
    SqStack S;
   
    InitStack(S);
    while(n){
        Push(S, n % m);
        n = n/m;
    }
    while(!StackEmpty(S)){
        Pop(S,e);
        printf( "%d",e);
    }
}

void main()
{
    int a,b;
    printf("请输入一个十进制非负整数:");
    scanf("%d",&a);
    printf("请输入要转换的进制数:");
    scanf("%d",&b);
       printf("转换为%d进制整数为:",b);
    conversion(a,b);
   

}
2015-10-23 18:30
洪梅
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-10-23
收藏
得分:0 
我自己已找到错误,下面是改正后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define STACK_INIT_SIZE  100
#define STACKINCREMENT   10

typedef  struct
{
    int   *base;   
    int   *top;
    int   stacksize;
}SqStack;

void InitStack(SqStack  &S)//构造空栈S
{
    S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
    if(!S.base)
        exit(0);
    //S.base=S.top;
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
}//InitStack

void Push(SqStack  &S, int e)//插入元素e为新的栈顶元素
{
    if(S.top-S.base>=S.stacksize)
    {
        S.base=(int *)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(int));
        if(!S.base)
            exit(0);//存储分配失败

        S.top = S.base+S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
}//Push

int Pop(SqStack  &S, int &e)//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
{
    if(S.top == S.base) return 0;
    e = *--S.top;
    return 1;

}//Pop

int StackEmpty(SqStack S)//若栈S为空,则返回TURE;否则返回FALSE
{
    if(    S.base == S.top)
        return 1;
    else
        return 0;
}

void conversion(int n,int m)
{
    int e;
    SqStack S;
    InitStack(S);
    while(n){
        Push(S, n % m);
        n = n/m;
    }
    while(!StackEmpty(S))
    {
            Pop(S,e);
            if(m==16)
            {
                if (e > 9)
                {
                   e = e + 'A' - 10;
                }
               else
               {
                   e= e + '0';
               }
               printf( "%c",(char)e);}
            else
                printf( "%d",e);
            }
}

void main()
{
    int a,b;
    printf("请输入一个十进制非负整数:\n");
    scanf("%d",&a);
    printf("请输入要转换的进制数:\n");
    scanf("%d",&b);
    if(b==16)
        printf("转换为%d进制整数为:\nOX",b);
    else if(b==8)
        printf("转换为%d进制整数为:\n0",b);
    else
        printf("转换为%d进制整数为:\n",b);
    conversion(a,b);
    printf("\n");
   

}
2015-10-25 20:20
快速回复:在VC6.0中,利用栈实现数制转换,代码有问题,请帮帮忙,谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015325 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved