进制转换C语言的实现.docx

上传人:苏美尔 文档编号:11659346 上传时间:2021-08-28 格式:DOCX 页数:13 大小:15.65KB
返回 下载 相关 举报
进制转换C语言的实现.docx_第1页
第1页 / 共13页
进制转换C语言的实现.docx_第2页
第2页 / 共13页
进制转换C语言的实现.docx_第3页
第3页 / 共13页
进制转换C语言的实现.docx_第4页
第4页 / 共13页
进制转换C语言的实现.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《进制转换C语言的实现.docx》由会员分享,可在线阅读,更多相关《进制转换C语言的实现.docx(13页珍藏版)》请在三一文库上搜索。

1、索引一、算法分析二、数据结构:1、头文件2、栈的关键操作三、关键程序:1、十进制进制转换为其它2、其它进制转换为十进制一、算法分析实现进制转换需要编个函数, 每一函数完成相应进制的转换, 下面是各个进制之间转换的数学方法的算法。十进制转二进制:十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。例如:302/2 = 151 余 0151/2 = 75 余 175/2 = 37 余 137/2 = 18 余 118/2 = 9 余 09/2 = 4 余 14/2 = 2 余 02/2 = 1 余

2、 0所以302转换为2进制,结果:100101110十进制转八进制:十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由 2变成8。例如:120/8=15 余 015/8=1 余 71/8=0 余 1所以120转换为8进制,结果为:170十进制转十六进制:十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:除数由 2变成16。不过,十六进制数:(1015)是用英文大写字母(AF)表示。例如:123/16=7 余 11所以123转换为16进制,结果为:7B二进制转十进制:二进制数转换为十进制数按权展开,第 0 位的权值是 2 的 0次方,第1位的权值是2的1次方例如

3、: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二1011二3然后将结果按从下往上顶顺序书写: 31二进制转十六进制:二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算;利用 8421 ,对于任意一个4 位的二进制数,都可以很快算出它对应的 10 进制值。例如:1111=8+4+2+1=15又因为十六进制数:1015用大写字母AF表示,所以15为 F。八

4、进制转二进制:利用 421 ;从后往前每三位一组,缺位处用 0 填补,然后按十进制方法进行转化 ;例如:1 0013- 011然后我们将结果按从下往上的顺序书写就是: 11001 ,那么这个 11001 就是八进制 31 的二进制形式。八进制转十进制:八进制就是逢 8进1,八进制数采用 07这八数来表达一个数;八进制数第 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所以换算成十进制: 7+0+320+512=839八进制转十六进制:八进制转换成十六进制:有两种方法:一

5、种是先将八进制转换成二进制,在将二进制转换成十六进制。另一种方法是将八进制转换成十进制,在将十进制转换成十六进制。十六进制转二进制:上面已经提到二进制转换成十六进制的方法,记住8421,每一位的权值, 所以十六进制转成二进制就是一段四位分别转成二进制。例如: F 1111 ,D 1101,A 1010,5 0101十六进制转八进制:十六进制转八进制也不能直接转换, 需要将十六进制转换成十进制或者二进制,才能由十进制或者二进制转换成八进制。十六进制转十进制:16 进制就是逢16 进 1 ,但我们只有09 这十个数字,所以我们用 A , B , C, D, E, F 这六个字母来分别表示10, 1

6、1 ,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#includetypedef enumFALSE,TRUE Bo

7、ol;typedef int ElementType;typedef structint top;ElementType*elements;int MaxSize;Stack;void InitStack(Stack*,int sz);void FreeStack(Stack*);int Push(Stack*,ElementType);ElementType Pop(Stack*);ElementType GetTop(Stack*);void MakeEmepty(Stack*);Bool IsEmpty(Stack*S);Bool IsFull(Stack*S);栈的关键操作:#incl

8、udestack.hBool IsEmpty(Stack*S)/* 判断栈是否为空 */return(Bool)(S-top=-1);void InitStack(Stack*S,int sz)/* 创建栈空间,生成一个空栈*/S-MaxSize=sz;S-elements=(ElementType*)malloc(sizeof(ElementType)*S-MaxSize);S-top=-1;int Push(Stack*S,ElementType item)/* 进栈 */if(!IsFull(S)S-elements+(S-top)=item;return 0;else return -

9、1;ElementType Pop(Stack*S)/* 出栈*/if(!IsEmpty(S)return S-elements(S-top)-; elseprintf(stack is empty!n);exit(1);关键程序:/*十进制进制转换为其它*/#includestack.hvoid ShiSl(long n,int t) int i=0, x;char Sl100;Stack *S=(Stack*)malloc(sizeof(Stack);InitStack(S,100);while(n0)Push(S,n%t); /关键句n/=t;/关键句while(!IsEmpty(S)

10、x=Pop(S);if(x10)Sli+=x+0;elseSli+=x-10+a;Sli=0;printf( 其 %d 进制数为: n,t);puts(Sl);printf(n);void main() int t;long shu;printf(请输要转化为几进:n);scanf(%d,&t);printf(请输入一个整数:n);scanf(%ld,&shu);ShiSl(shu,t);/* 其它进制转换为十进制 */#include#includevoid main() char c,Y100;int n,i=0,k,j=0;long T=0;printf(请输入该数的进制数:n);scanf(%d,&n);printf( 请输该数位数:n);scanf(%d,&k);fflush(stdin);for(i=0;i0&YiA& Yia&Yiz)T=T*n+Yi-a;else printf( 输入有误 !);exit(1);printf( 该数的十进制为 :);printf(%ld,T);printf(n);

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1