完整word版进制转换C语言的实现docx.docx
- 文档编号:5724047
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:16
- 大小:17.49KB
完整word版进制转换C语言的实现docx.docx
《完整word版进制转换C语言的实现docx.docx》由会员分享,可在线阅读,更多相关《完整word版进制转换C语言的实现docx.docx(16页珍藏版)》请在冰豆网上搜索。
完整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"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 版进制 转换 语言 实现 docx