鱼C论坛

 找回密码
 立即注册
查看: 4123|回复: 2

用栈写的任意进制转化有点问题!请大家看看啊!

[复制链接]
发表于 2011-8-8 08:55:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>//本题思想是体会栈的用法及用栈事改主意的事项!当然也可以用数组OR线表来实现
#include<malloc.h>
#define kaipi 100
typedef struct
{
int *top;
int *base;
int chang;
}zhan;
int chushi(zhan *z)
{
  z->base=(int *)malloc(kaipi*sizeof(int));
   if(!z->base)
   {
    printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
    return 0;
   }
   z->top=z->base;
   z->chang=kaipi;
   return 0;
}
int jinzhan(zhan *z,int shu,int jin)
{
if((z->top)-(z->base)==(z->chang))
{
  printf("额!栈的空间已经用完了要开辟增加新的空间了!不然就要产出上溢了!我们还是让PC要增加新的空间吧O(∩_∩)O~!请输入要增加的空间大小!");
  int xin;
  scanf("%d",&xin);
  z->base=(int *)realloc(z->base,(shu+xin)*sizeof(int));
  if(!z->base)
  {
   printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
   return 0;
  }
  z->top=z->base+shu;
  z->chang=shu+xin;
}
while(shu)
{
  *(z->top)=shu%jin;
  z->top++;
  shu=shu/jin;
}
return 0;
}
int chuzhan(zhan *z)
{
if(z->top==z->base)
{
  printf("如果程序在运行就要产生下益了!!!还是让PC停止吧!!!O(∩_∩)O~");
  return 0;
}
while(z->top!=z->base)
{
  if(*(--(z->top))<10)
   printf("%d",z->top);
  else
   *(z->top)=*(z->top)-10+65;
   printf("%d",z->top);
}
printf("\n");
free(z);
return 0;
}
void main()
{
int shu,jin;
zhan z;
printf("请输入你要转换的数字");
scanf("%d",&shu);
printf("请输入你想转换的进制");
scanf("%d",&jin);
chushi(&z);
jinzhan(&z,shu,jin);
chuzhan(&z);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-8 12:46:52 | 显示全部楼层
看着指针  就头疼  malloc  这个东西  我只要调用  就没说能正常编译过去的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-8 13:56:18 | 显示全部楼层
:lol经过我的努力我已经改好了嘿嘿!
#include <stdio.h>//本例要求掌握是在用栈时应该主要的事项!如果闲代码长可以用数组写
#include<malloc.h>
#define kaipi 100
typedef struct
{
        int *top;
        int *base;
        int chang;
}zhan;
int chushi(zhan *z)
        {
                z->base=(int *)malloc(kaipi*sizeof(int));
                        if(!z->base)
                        {
                                printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的吧!!!");
                                return 0;
                        }
                        z->top=z->base;
                        z->chang=kaipi;
                        return 0;
        }
int jinzhan(zhan *z,int shu,int jin)
{
        if((z->top)-(z->base)==(z->chang))
        {
                printf("额!栈的空间已经用完了要开辟增加新的空间了!不然就要产出上溢了!我们还是让PC要增加新的空间吧O(∩_∩)O~!请输入要增加的空间大小!");
                int xin;
                scanf("%d",&xin);
                z->base=(int *)realloc(z->base,(shu+xin)*sizeof(int));
                if(!z->base)
                {
                        printf("开辟失败!日!空间怎么怎么快就用完了!垃圾PC赶快丢了吧买新的!!!");
                        return 0;
                }
                z->top=z->base+shu;
                z->chang=shu+xin;
        }
        while(shu)
        {
                *(z->top)=shu%jin;
                z->top++;
                shu=shu/jin;
        }
        return 0;
}
int chuzhan(zhan *z)
{
        if(z->top==z->base)
        {
                printf("如果程序在运行就要产生下益了!!!还是让PC停止吧!!!O(∩_∩)O~");
                return 0;
        }
        while(z->top!=z->base)
        {
                if(*(--(z->top))<10)
                {
                        printf("%d",*(z->top));
                }
                else
                {
                        *(z->top)=*(z->top)-10+65;
                        printf("%c",*(z->top));
                }
        }
        printf("\n");
        free(z->base);
        return 0;
        }
void main()
{
int shu,jin;
zhan z;
printf("请输入你要转换的10进制数字");
scanf("%d",&shu);
printf("请输入你想转换的进制");
scanf("%d",&jin);
chushi(&z);
jinzhan(&z,shu,jin);
chuzhan(&z);
}
QQ截图20110808135527.png
QQ截图20110808135512.png
QQ截图20110808135457.png
QQ截图20110808135430.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 15:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表