求大神将这两个程序放在一个程序里执行连在一起。然后选择1和2执行时使用哪个程序
1#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
int e,m,x,s,t; //x为要转换的十进制数,e 为临时用的的int型变量
int r,y,i,n;
typedef struct{
int *base; //栈底
int *top; //栈顶
int stacksize; //栈容量
}SqStack;
int InitStack(SqStack &S){ //构造一个空栈
S.base=(int *)malloc(STACK_INIT_SIZE *sizeof(int));
if(!S.base) exit(0); //存储空间失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return 0;
}
int GetTop(SqStack S, int &e){ //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1
if(S.top==S.base) return 1;
e=*(S.top-1);
return 0;
}
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) return 1 ; //存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return 0;
}
int Pop(SqStack &S, int &e){ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1
if(S.top==S.base) return 1;
e=*--S.top;
return 0;
}
int StackEmpty(SqStack S){ //若栈空,则返回1,否则返回0
if(S.top==S.base)
return 1;
return 0 ;
}
int DestroyStack(SqStack &S){ //销毁栈S,栈S不再存在
free(S.base);
S.top=NULL; //防止程序后面不小心使用了它
S.base=S.top;
return 0 ;
}
SqStack S; //定义栈S
D2M(int a,int b) //十进制转换成其他进制的函数D2M()
{
while(a)
{
r=a%b;
if(r>9)
r=r+55;
Push(S,r); //压入栈
a/=b; //转换成M进制
}
printf("该数转换成%d进制的结果:",b);
while(!StackEmpty(S))
{
Pop(S,e); //弹出栈
if(e>=65)
printf("%c",e);
else
printf("%d",e);
}
return 0;
}
M2D() //其他进制转换为十进制的函数M2D()
{
char c[1000];
printf("请输入需要转换的数的位数:");
scanf("%d",&n);
printf("请输入需要转换的数的每位并用空格隔开:");
for(i=0;i<n;i++)
{
scanf("%x",&c[i]);
Push(S,c[i]);
}
i=0;
while(!StackEmpty(S))
{
Pop(S,e);
y+=(int)pow(m,i)*e;
i++;
}
printf("转换成10进制的结果是:");
printf("%d",y);
return 0;
}
void main()
{
InitStack(S); //构造一个空栈
printf("请输入需要转换的进制M(2or8or10or16):");
scanf("%d",&m);
if(m==10) //十进制转换成其他进制
{
printf("请给定一个需要转换的10进制数:");
scanf("%d",&x);
printf("请输入需要转换成的进制数:");
scanf("%d",&t);
D2M(x,t);
}
if(m==2||m==8||m==16) //其他进制转换成十进制,且其他任意进制的相互转换
{
M2D();
printf("\n给定要转换成的进制M:");
scanf("%d",&s);
D2M(y,s);
}
printf("\n");
DestroyStack(S); //销毁栈S,栈S不再存在
}
2
#include<stdio.h>
#include<math.h>
#define N 1000
int i,j,y,n,s,x;
int m,r,reminder;
void D2M(int g,int h);
void M2D(int e);
void H2D(int f);
//十进制数转换为其他进制数
void D2M(int g,int h)
{
int c[N];
i=0;
reminder=g%h;
g=g/h;
if(reminder>9)
{
c[i]=reminder+55;
i++;
}
else
{
c[i]=reminder;
i++;
}
if(g>0)
D2M(g,h);
for(j=i-1;j>=0;j--)
if(c[j]>=65)
printf("%c",c[j]);
else
printf("%d",c[j]);}
void M2D(int e) //二进制和八进制数转换为十进制数,并这转换为其他进制数
{
int a[N];
printf("请输入%d进制位数:",m);
scanf("%d",&n);
printf("请输入%d进制的每位并使每位用空格隔开:",m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=n-1;i>=0;i--)
{
y+=(int)pow(e,j)*a[i]; //强制类型转换,以免造成数据丢失
j++;
}
printf("请输出所得的10进制的结果: ");
printf("%d",y);
printf("\n需要转换的进制M:");
scanf("%d",&s);
printf("请输出转换成%d进制的结果:",s);
D2M(y,s);
}
void H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数
{
int b[N];
printf("请输入%d进制位数:",m);
scanf("%d",&n);
printf("请输入%d进制的每位并使每位用空格隔开:",m);
for(i=0;i<n;i++)
scanf("%x",&b[i]);
for(i=n-1;i>=0;i--)
{
y+=(int)pow(f,j)*b[i]; //强制类型转换,以免造成数据丢失
j++;
}
printf("请输出所得的10进制的结果: ");
printf("%d",y);
printf("\n需要转换的进制M:");
scanf("%d",&s);
printf("请输出转换成%d进制的结果:",s);
D2M(y,s);
}
void main()
{
printf("请给定一个需转换的进制M(2or8or10or16):");
scanf("%d",&m);
if(m==2||m==8) //二进制和八进制转换成十进制
M2D(m);
else if(m==16) //十六进制转换成十进制
H2D(m);
else if(m==10) //十进制转换成其它进制
{
printf("请输入一个%d进制数:",m);
scanf("%d",&x);
printf("请输入需要转换成的进制M(2or8or16):");
scanf("%d",&r);
printf("请输出转换成%d进制的结果:",r);
D2M(x,r);
}
printf("\n");
}
[ 本帖最后由 爱上不完美 于 2013-1-14 22:16 编辑 ]