您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页数制转换(栈应用)实验报告

数制转换(栈应用)实验报告

来源:二三娱乐
实验报告

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;

}

while(S.top!=S.base) { }

int x; pop(S,x); printf(\"%x\

int main() { }

int n,m;

printf(\"请输入一个十进制正整数:\"); scanf(\"%d\

printf(\"\\n输入要转换进制:\"); scanf(\"%d\if(m<2) { }

conversion(n,m); printf(\"\\n\"); return OK;

printf(\"输入不合法!请输入大于1的进制!\"); printf(\"\\n\"); return ERROR;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务