数制转换问题文档格式.doc

上传人:b****1 文档编号:13168823 上传时间:2022-10-07 格式:DOC 页数:19 大小:141KB
下载 相关 举报
数制转换问题文档格式.doc_第1页
第1页 / 共19页
数制转换问题文档格式.doc_第2页
第2页 / 共19页
数制转换问题文档格式.doc_第3页
第3页 / 共19页
数制转换问题文档格式.doc_第4页
第4页 / 共19页
数制转换问题文档格式.doc_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数制转换问题文档格式.doc

《数制转换问题文档格式.doc》由会员分享,可在线阅读,更多相关《数制转换问题文档格式.doc(19页珍藏版)》请在冰豆网上搜索。

数制转换问题文档格式.doc

输入方式:

首先输入将转换的进制数,回车确认;

然后输入确定的数据,回车确认;

接着选择要转换为的进制数,回车确认。

输出方式:

界面直接输出,启动程序后,按照界面提示,输入数据,直接回车确认,显示屏即输出我们的数据结果。

数据储存方式:

全部在内存存放,不使用硬盘上的文件或其他数据源,程序执行过程中和结束后不保存数据。

程序功能:

1.根据界面提示输入M进制数据。

2.对任意M进制数据实行非M进制的转换。

二.概要设计

在此说明数据结构设计和关键的算法设计思想

1.用数组实现该问题

 D2M()函数和M2D()函数是实现该问题的主要函数。

 D2M()函数是实现十进制转换为其它进制的函数,它是将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,接着通过递归调用D2M()函数依次将得到的整数部分依次先取余后取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。

而M2D()函数则是实现其他进制M转换为十进制,并将其转换为非M进制的数。

M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。

⑴ i,j,y,n,s,m,r,reminder,x是定义的全局变量,初始值都为0;

⑵ D2M(intg,inth)是实现十进制数转换为M进制数的函数;

⑶ M2D(inte)是实现M(仅指二进制数和八进制数)进制数转换为十进制数的函数,并在其中调用D2M(intg,inth)实现向非M进制数的转换;

⑷ H2D(intf)是实现十六进制数转换为十进制数的函数,并在其中调用D2M(intg,inth)实现向非十六进制数的转换;

⑸ voidmain()是主函数,功能是给出测试的数据,并在特定条件下调用D2M()函数和M2D()函数。

使用简单一维数组inta[N],intb[N],intc[N]。

2.用栈实现该问题

同样是利用D2M()和M2D()两个函数实现。

两个函数的思想同利用数组实现时相同。

只是栈具有后进先出的性质,故其用Pop()取数较数组的逆向取数方便些。

⑴ SqStack定义栈,说明base为栈底指针,top为栈顶指针,stacksize为栈容量;

⑵ intInitStack(SqStack&

S)到intDestroyStack(SqStack&

S)六大模块分别表示构造一个空栈、用e表示栈元素、插入元素、删除元素、判断栈是否为空以及摧毁栈;

⑶ SqStackS是指定义栈S;

⑷ D2M(inta,intb)的功能是将十进制数转换成M进制的函数;

⑸ M2D()的功能是M进制转换为十进制的函数;

⑹ voidmain()是主函数。

其功能是输入需要测试的数据以及需要转换的进制,并在特定情形下调用D2M()函数和M2D()函数,而且实现M进制数向任意非M进制数的转换。

数据类型定义如下:

  typedefstruct{

int*base;

栈底

int*top;

栈顶

intstacksize;

栈容量

}SqStack;

intInitStack(SqStack&

S)构造一个个空栈

intGetTop(SqStackS,int&

e)若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1

intPush(SqStack&

S,inte)插入元素e为新的栈顶元素

intPop(SqStack&

S,int&

e)若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1。

1.程序流程图

开始

数组

输入需转换的位数

输入需转换的数的进制N

若N!

=10

若N=10

输入需转换的数

输出结果

输入将转换的进制数

2.程序源代码

A.用数组实现(文件名shuzu.cpp)

#include<

stdio.h>

math.h>

#defineN1000

inti,j,y,n,s;

intm,r,reminder;

intx;

//全局变量默认初始化为0,不必再赋0了

D2M(intg,inth)//十进制数转换为其他进制数

{

intc[N];

i=0;

reminder=g%h;

g=g/h;

if(reminder>

9)

{

c[i]=reminder+55;

i++;

}

else

c[i]=reminder;

if(g>

0)

D2M(g,h);

for(j=i-1;

j>

=0;

j--)

if(c[j]>

=65)

printf("

%c"

c[j]);

else

%d"

return0;

}

M2D(inte)//二进制和八进制数转换为十进制数,并这转换为其他进制数

inta[N];

printf("

请输入%d进制位数:

"

m);

scanf("

&

n);

printf("

请输入%d进制的每位并使每位用空格隔开:

for(i=0;

i<

n;

i++)

scanf("

a[i]);

for(i=n-1;

i>

i--)

y+=(int)pow(e,j)*a[i];

//强制类型转换,以免造成数据丢失

j++;

需要转换的进制M:

);

s);

请输出转换成%d进制的结果:

s);

D2M(y,s);

H2D(intf)//十六进制数转换为十进制数,并转换为其他进制数

intb[N];

scanf("

%x"

b[i]);

i--)

y+=(int)pow(f,j)*b[i];

//强制类型转换,以免造成数据丢失

j++;

voidmain()

请给定一个需转换的进制M(2or8or10or16):

m);

if(m==2||m==8)//二进制和八进制转换成十进制

M2D(m);

elseif(m==16)//十六进制转换成十进制

H2D(m);

elseif(m==10)//十进制转换成其它进制

printf("

请输入一个%d进制数:

scanf("

x);

请输入需要转换成的进制M(2or8or16):

r);

r);

D2M(x,r);

\n"

B.用栈实现(文件名zhan.cpp)

malloc.h>

stdlib.h>

#defineSTACK_INIT_SIZE100//存储空间初始分配量

#defineSTACKINCREMENT10//存储空间分配增量

inte,m,x,s,t;

//x为要转换的十进制数,e为临时用的的int型变量

intr,y,i,n;

typedefstruct{

//栈底

//栈顶

//栈容量

S){//构造一个空栈

S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));

if(!

S.base)exit(0);

//存储空间失败

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

e){//若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1

if(S.top==S.base)return1;

e=*(S.top-1);

S,inte){//插入元素e为新的栈顶元素

if(S.top-S.base>

=S.stacksize){//栈满,追加存储空间

S.base=(int*)realloc(S.base,

(S.stacksize+STACKINCREMENT)*sizeof(int));

if(!

S.base)return1;

//存储分配失败

S.top=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

*S.top++=e;

e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回0,否则返回1

e=*--S.top;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1