用栈写的任意进制转化有点问题!请大家看看啊!
#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);
}
看着指针就头疼malloc这个东西我只要调用就没说能正常编译过去的 :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);
}
页:
[1]