任意进制转换(包含小数负数)---实验报告

上传人:jiups****uk12 文档编号:38453835 上传时间:2018-05-02 格式:DOCX 页数:10 大小:707.22KB
返回 下载 相关 举报
任意进制转换(包含小数负数)---实验报告_第1页
第1页 / 共10页
任意进制转换(包含小数负数)---实验报告_第2页
第2页 / 共10页
任意进制转换(包含小数负数)---实验报告_第3页
第3页 / 共10页
任意进制转换(包含小数负数)---实验报告_第4页
第4页 / 共10页
任意进制转换(包含小数负数)---实验报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《任意进制转换(包含小数负数)---实验报告》由会员分享,可在线阅读,更多相关《任意进制转换(包含小数负数)---实验报告(10页珍藏版)》请在金锄头文库上搜索。

1、实验报告实验报告 1-任意进制转换任意进制转换谢永意_1031一、实验计划本实验为信息科学教程第一个实验题,计划三堂实验课内 (10、11、12 周) ,完成一个进制转换的程序,并完成实验报告。二、需求分析进制转换是人们利用符号来计数的方法,包含很多种数字转换。进制 转换由一组数码符号和两个基本因素(“基”与“权” )构成。比如二进制 下,基数是 2,数码是 0 和 1,各数位的位权是以 2 为底的幂次方,进位方 法是逢二进一,借一当二,例如:2)(00011011 当今高速发展的计算机和互联网产业,正改变人们的生活,促使着人 类走向了第三次工业革命。日常生活和计算机常用的进制包括:二进制、六

2、进制、八进制、十进 制、十六进制、三十二进制和六十四进制等。但是实际生活和计算机运算中 常用的几种进制之间的转换如下。 需求分析之后,得到本实验的目的,编程实现常用的进制之间的任意转 换,为了满足计算机科学计算的要求,并考虑到负数和小数的进制转换。三、算法设计首先理清一下常用四种进制数下的对应光系如下。然后整理一下各进制。我们最常用的是十进制,十进制下按权展开的多项式为:210123 10107105104109108106)57.6894(1. 其他进制转换为十进制其他进制转换为十进制算法设计: 按权展开用多项式表示再求和。(1) 二进制10210123 2)75.10(2121212120

3、21)11.1011((2) 八进制1021012 8)625.127(8485868781)54.174((3) 十六进制101012 16)8125.2607(161316151621610).2(CFA2. 十进制转换为其他进制(负数、小数)十进制转换为其他进制(负数、小数)算法设计: 整数部分,除基数取余,倒序排列; 小数部分,乘基数取整,顺序排列; 负数,补码,看作正数,先将整数部分转换成二进制,取反加一。(1) 二进制 210)1011.0111 1110 1111 1111()6875.25(注意负数部分注意负数部分,将-25 变成二进制。 首先假定二进制的位数为 16 位,可表

4、示-32768 到 32767 的所有十进制整数。 将 25 表示为二进制 0000 0000 0001 1001(十六进制表示为 0x0018,由于 四位二进制可以表示为一位十六进制,故一般将二进制按四位进行分段表示) 将这个二进制取反,可以得到 1111 1111 1110 0110(十六进制表示为 0xFFE6) 将取反后的数值加上 1,得到-25 的二进制表示 1111 1111 1110 0111(十 六进制表示 0xFFE7)(2) 八进制 810)1011.11001()6875.25((3) 十六进制 1610)3 .1513()23.834(AE3. 二进制和八、十六进制的相

5、互转换二进制和八、十六进制的相互转换算法设计: 二进制转换成八进制, “三位一组” 。以小数点为基点, 整数小数两边,每三位一组,最高处不足三位时,加 0 补足,然后各组 三位二进制转换成一个八进制。而八进制转换成二进制,正好是一个逆 的过程。二进制和十六进制的互转,算法和八进制的一些,只是“四位 一组” 。例如 和 82)32.106()011010.1000110(162)8.97()11010.10010111(D4. 八八进制和十六进制的相互转换进制和十六进制的相互转换算法设计:二进制做桥梁例如: 1628)2. 5()0011100.01011111()604.365(CF四、编程实

6、现平台:win7 64 位 运行软件: VC+6.0#include#include#include#define P printf#define S scanf#define PF printf(“n“)void transform(double num,int jz)char xnum100;int dnum=(int) num;int i=0,j=0,e=0;while(dnum=jz)if(dnum%jz=10) xnumj+=dnum%jz-10+A;dnum=dnum/jz;if(dnum%jz=10) xnumj = dnum%jz-10+A;for(i = j;i=0;i-)p

7、rintf(“%c“,xnumi);if(dnum - num != 0)printf(“.“);num = num - (int)num;doe+;if(int)(num*jz)=10) printf(“%c“,A+(int)(num*jz)-10);num = num*jz-(int)(num*jz);if(num = 0)break;while(e20); double x2d(int jz,char num)double dnum = 0;int i=0,j = 0,k=0,n=0,b;for(i;i+)if(numi=0) break;else n+;if(numi=.)j=i;k=

8、1;if(k=0) / 没有小数for(i=0;i=n-1;i+)if(numi=A) b=10;else if(numi=B) b=11;else if(numi=C) b=12;else if(numi=D) b=13;else if(numi=E) b=14;else if(numi=F) b=15;else b=numi-0;dnum =dnum + (double)b*pow(jz,n-1-i);if(k=1) / 有小数 for(i=0;i=j-1;i+)if(numi=A) b=10;else if(numi=B) b=11;else if(numi=C) b=12;else i

9、f(numi=D) b=13;else if(numi=E) b=14;else if(numi=F) b=15;else b=numi-0;dnum =dnum + (double)(b)*pow(jz,j-1-i); for(i=j+1;in;i+)if(numi=A) b=10;else if(numi=B) b=11;else if(numi=C) b=12;else if(numi=D) b=13;else if(numi=E) b=14;else if(numi=F) b=15;else b=numi-0;dnum=dnum+b*pow(jz,-(i-j);return dnum;

10、 int run(int jz, char num)switch(jz)case 2:printf(“n8 进制: “); transform(x2d(jz, num), 8); printf(“n10 进制:“); transform(x2d(jz, num), 10); printf(“n16 进制:“); transform(x2d(jz, num), 16);break;case 8:printf(“n2 进制: “); transform(x2d(jz, num), 2);printf(“n10 进制:“); transform(x2d(jz, num), 10);printf(“n

11、16 进制:“); transform(x2d(jz, num), 16);break;case 10:printf(“n2 进制: “); transform(x2d(jz, num), 2);printf(“n8 进制: “); transform(x2d(jz, num), 8);printf(“n16 进制:“); transform(x2d(jz, num), 16);break;default:printf(“n2 进制: “); transform(x2d(jz, num), 2);printf(“n8 进制: “); transform(x2d(jz, num), 8);pri

12、ntf(“n10 进制:“); transform(x2d(jz, num), 10);break;return 0;int control(int leap) / 控制函数int p=1; char k;PF; printf(“n*n“);PF; PF; printf(“是否继续,Y/N?n“);while(p)scanf(“%c“,if(k=Y|k=y)leap=1; PF; break;if(k=N|k=n)leap=0; break;return(leap);int main()char num100; / 输入的数int jz,leap=1;while(leap)printf(“*n

13、“);printf(“输入的(2、8、10 或 16)进制为: “);scanf(“%d“, / 输入的进制printf(“请输入一个该进制的数: “);scanf(“%s“, PF;if(jz=2 | jz=8 | jz=10 | jz=16)printf(“转换结果如下:n“);run(jz, num); leap=control(leap); / 控制函数elseprintf(“n ERROR! 请输入一个 2、8、10 或 16 进制的数! n“);leap=control(leap); / 控制函数return 0;五、结果测试1. 测试的数据设计,各进制转换分成三类:整数、小数和负数。具体如下:2. 测试结果六、实验总结本实验基本完成了常用进制的转换,包括 2 进制、8 进制、10 进制和 16 进制,能完成整数、小数的进制转换,负数功能还有待改进。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号