实验报告
1.实验题目
运用栈进行数制转换。
2.需求分析
用C 编写完成:对于输入的任意一个非负十进制整数,输出与其等值的其他进制数。
3.概要设计
由于运行过程是从低位到高位顺序产生进制数的各个数位,而输出应从高位到底位进行,这和计算过程相反,恰好可以运用栈把进制数的各位顺序入栈,而按出栈序列输出,即为对应转换的进制数。
4.详细设计
1) 先对栈定义:
Typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Stack;
2) 构造一个栈:
int InitStack(Stack &S)//初始化栈
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit (ERROR); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
3) 分别进行入栈和出栈操作,再进行进制转换。
5.调试分析
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
//栈定义
typedef struct
{
int *base; int *top; int stacksize;
}Stack;
int InitStack(Stack &S)//初始化栈
{
}
int push(Stack &S,int e)//入栈
{
if(S.top-S.base>=S.stacksize) //栈满 S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;
} } *S.top++=e; return 1; S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;
int pop(Stack &S,int &e)//出栈
{
}
void conversion(int n,int m)//n为十进制数,m 为要转换进制 {
Stack S; InitStack(S); while(n!=0) { } push(S,n%m); n=n/m; if(S.top==S.base) return ERROR;//栈空 e=* --S.top; return OK;
} { } int x; pop(S,x); printf("%x",x);
int main() {
} int n,m; printf("请输入一个十进制正整数:"); scanf("%d",&n); printf("\n输入要转换进制:"); scanf("%d",&m); if(m
实验报告
1.实验题目
运用栈进行数制转换。
2.需求分析
用C 编写完成:对于输入的任意一个非负十进制整数,输出与其等值的其他进制数。
3.概要设计
由于运行过程是从低位到高位顺序产生进制数的各个数位,而输出应从高位到底位进行,这和计算过程相反,恰好可以运用栈把进制数的各位顺序入栈,而按出栈序列输出,即为对应转换的进制数。
4.详细设计
1) 先对栈定义:
Typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Stack;
2) 构造一个栈:
int InitStack(Stack &S)//初始化栈
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit (ERROR); //存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
3) 分别进行入栈和出栈操作,再进行进制转换。
5.调试分析
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
//栈定义
typedef struct
{
int *base; int *top; int stacksize;
}Stack;
int InitStack(Stack &S)//初始化栈
{
}
int push(Stack &S,int e)//入栈
{
if(S.top-S.base>=S.stacksize) //栈满 S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;
} } *S.top++=e; return 1; S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)* sizeof(int)); if(!S.base) exit (ERROR); //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;
int pop(Stack &S,int &e)//出栈
{
}
void conversion(int n,int m)//n为十进制数,m 为要转换进制 {
Stack S; InitStack(S); while(n!=0) { } push(S,n%m); n=n/m; if(S.top==S.base) return ERROR;//栈空 e=* --S.top; return OK;
} { } int x; pop(S,x); printf("%x",x);
int main() {
} int n,m; printf("请输入一个十进制正整数:"); scanf("%d",&n); printf("\n输入要转换进制:"); scanf("%d",&m); if(m