完整word版进制转换C语言的实现docx.docx

上传人:b****5 文档编号:5724047 上传时间:2022-12-31 格式:DOCX 页数:16 大小:17.49KB
下载 相关 举报
完整word版进制转换C语言的实现docx.docx_第1页
第1页 / 共16页
完整word版进制转换C语言的实现docx.docx_第2页
第2页 / 共16页
完整word版进制转换C语言的实现docx.docx_第3页
第3页 / 共16页
完整word版进制转换C语言的实现docx.docx_第4页
第4页 / 共16页
完整word版进制转换C语言的实现docx.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

完整word版进制转换C语言的实现docx.docx

《完整word版进制转换C语言的实现docx.docx》由会员分享,可在线阅读,更多相关《完整word版进制转换C语言的实现docx.docx(16页珍藏版)》请在冰豆网上搜索。

完整word版进制转换C语言的实现docx.docx

完整word版进制转换C语言的实现docx

 

索引

 

一、算法分析

 

二、数据结构:

 

1、头文件

 

2、栈的关键操作

 

三、关键程序:

 

1、十进制进制转换为其它

 

2、其它进制转换为十进制

 

一、算法分析

 

实现进制转换需要编个函数,每一函数完成相应进制的转换,

 

下面是各个进制之间转换的数学方法的算法。

 

十进制转二进制:

 

十进制数转换成二进制数,是一个连续除2的过程;把要转

 

换的数,除以2,得到商和余数,将商继续除以2,直到商为0.

 

最后将所有余数倒序排列,得到数就是转换结果。

 

例如:

 

302/2

=151

余0

151/2

=75

余1

 

75/2=37余1

 

37/2=18余1

 

18/2=9余0

 

9/2=4余1

 

4/2=2余0

 

2/2=1余0

 

所以302转换为2进制,结果:

100101110

 

十进制转八进制:

 

十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:

除数由2变成8。

例如:

 

120/8=15余0

 

15/8=1余7

 

1/8=0余1

 

所以120转换为8进制,结果为:

170

 

十进制转十六进制:

 

十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:

除数由2变成16。

 

不过,十六进制数:

(10~15)是用英文大写字母(A~F)表示。

 

例如:

 

123/16=7余11

 

所以123转换为16进制,结果为:

7B

 

二进制转十进制:

 

二进制数转换为十进制数按权展开,第0位的权值是2的0

 

次方,第1位的权值是2的1次方·

 

例如:

 

1010转换成十进制数:

 

第0位:

0*2^0=0

 

第1位:

1*2^1=2

 

第2位:

0*2^2=0

 

第3位:

1*2^3=8

 

所以转换为10进制数为:

0+2+0+8=10

 

二进制转八进制:

 

利用421,从后往前每三位一组,缺位除补0,然后按十进制

 

方法进行转换。

 

例如:

 

(11001)

 

001=1

 

011=3

 

然后将结果按从下往上顶顺序书写:

31

 

二进制转十六进制:

 

二进制和十六进制的互相转换比较重要。

不过这二者的转

 

换却不用计算;利用8421,对于任意一个4位的二进制数,

 

都可以很快算出它对应的10进制值。

 

例如:

 

1111=8+4+2+1=15

 

又因十六制数:

10~15用大写字母A~F表示,所以15

 

F。

 

八制二制:

 

利用421;从后往前每三位一,缺位用0填,然后

 

按十制方法行化;

 

例如:

 

1—>001

 

3-011

 

然后我将果按从下往上的序写就是:

11001,那么

 

个11001就是八制31的二制形式。

八制十制:

 

八制就是逢

 

8

 

1,八制数采用

 

0~7

 

八数来表达

一个数;八制数第

0位的

8的

0次方,第

1位

8的1次方,第2位8的2次方⋯⋯例如:

 

1507

 

第0位:

7*8^0=7

 

第1位:

0*8^1=0

 

第2位:

5*8^2=320

 

第3位:

1*8^3=512

 

所以换算成十进制:

7+0+320+512=839八进制转十六进制:

 

八进制转换成十六进制:

有两种方法:

一种是先将八进制转换成二进制,在将二进制转换成十六进制。

另一种方法是将八进制转换成十进制,在将十进制转换成十六进制。

十六进制转二进制:

 

上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值,所以十六进制转成二进制就是一段四位分别转成二进制。

 

例如:

F1111,D1101,A1010,50101十六进制转八进制:

 

十六进制转八进制也不能直接转换,需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。

十六进制转十进制:

 

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。

 

十六进制数的第0位的权值为16的0次方,第1位的权

 

值为16的1次方,第2位的权值为16的2次方·

 

所以,在第N(N从0开始)位上,如果是是数X(X

 

大于等于0,并且X小于等于15,即:

F)表示的大小为X*

 

16的

 

N次方。

 

例如:

 

2AF5

 

第0位:

5*16^0=5

 

第1位:

F*16^1=240

 

第2位:

A*16^3=2560

 

第3位:

2*16^4=8192

 

所以转换成十进制数为:

10997.

 

二、数据结构:

 

栈:

头文件“stack.h”

 

#include

 

#include

 

typedefenum{FALSE,TRUE}Bool;

 

typedefintElementType;

 

typedefstruct

 

{

 

inttop;

 

ElementType*elements;

 

intMaxSize;

 

}Stack;

 

voidInitStack(Stack*,intsz);

 

voidFreeStack(Stack*);

 

intPush(Stack*,ElementType);

 

ElementTypePop(Stack*);

 

ElementTypeGetTop(Stack*);

 

voidMakeEmepty(Stack*);

 

BoolIsEmpty(Stack*S);

 

BoolIsFull(Stack*S);

 

栈的关键操作

 

#include"stack.h"

 

BoolIsEmpty(Stack*S)

 

/*判断栈是否为空

 

*/

{

 

return(Bool)(S->top==-1);

 

}

 

创建栈空间,生成

 

一个空栈*/

 

{

 

S->MaxSize=sz;

 

S->elements=(ElementType*)malloc(sizeof(ElementType)*S-

 

>MaxSize);

 

S->top=-1;

 

}

 

intPush(Stack*S,ElementTypeitem)

 

{

 

/*进栈*/

if(!

IsFull(S))

 

{

 

S->elements[++(S->top)]=item;

 

return0;

 

}

 

elsereturn-1;

 

}

 

ElementTypePop(Stack*S)

 

{

 

/*出栈*/

if(!

IsEmpty(S))

 

returnS->elements[(S->top)--];

 

else

 

{

 

printf("stackisempty!

\n");

 

exit

(1);

 

}

 

}

 

关键程序:

 

/*十进制进制转换为其它

*/

#include"stack.h"

 

voidShiSl(longn,intt)

 

{inti=0,x;charSl[100];

Stack*S=(Stack*)malloc(sizeof(Stack));

 

InitStack(S,100);

 

while(n>0)

 

{

 

Push(S,n%t);//关键句

 

n/=t;//关键句

 

}

 

while(!

IsEmpty(S))

 

{x=Pop(S);if(x<10)

Sl[i++]=x+'0';

 

else

 

Sl[i++]=x-10+'a';

 

}

 

Sl[i]='\0';

 

printf("其%d进制数为:

\n",t);

 

puts(Sl);

 

printf("\n");

 

}

 

voidmain()

 

{intt;longshu;

printf("请输要转化为几进:

\n");

 

scanf("%d",&t);

 

printf("请输入一个整数:

\n");

 

scanf("%ld",&shu);

 

ShiSl(shu,t);

 

}

 

/*其它进制转换为十进制*/

 

#include

 

#include

 

voidmain()

 

{charc,Y[100];intn,i=0,k,j=0;longT=0;

printf("请输入该数的进制数:

\n");scanf("%d",&n);

 

printf("请输该数位数:

\n");

 

scanf("%d",&k);

 

fflush(stdin);

 

for(i=0;i

 

{

 

printf("请输该数第%d:

\n",++j);

 

scanf("%d",&c);

 

Y[i]=c;

 

}

 

Y[i]='\0';

 

for(i=0;Y[i]!

='\0';i++)

 

{

 

if(Y[i]>0&&Y[i]<9)

 

T=T*n+Y[i];

 

else

 

if(Y[i]>'A'&&Y[i]<'Z')

 

T=T*n+Y[i]-'A';

 

else

 

if(Y[i]>'a'&&Y[i]<'z')

 

T=T*n+Y[i]-'a';

 

else

 

{printf("输入有误!

");exit

(1);

 

}

 

}

 

printf("该数的十进制为:

");

 

printf("%ld",T);

 

printf("\n");

 

}

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

当前位置:首页 > 医药卫生 > 基础医学

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

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