资源描述
,目录,退出,目录,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,案例六 十进制数与二进制数的转换器,本案例知识要点,循环语句的使用,函数的嵌套调用,字符数组的使用,一、案例需求,案例描述,在C+语言中,Visual C+开发环境只提供了十进制向八进制或十六进制转换的功能,而并没有提供十进制转换为二进制的功能。,试编写一个程序,要求用户在屏幕上输入一个带小数的十进制数后,计算机给出相应的二进制数。,案例效果图,十进制数与二进制数的转换器案例效果如图所示。,运行效果,功能说明,程序开始运行后,在屏幕上给出提示。,用户按照提示输入一个十进制数,可以包括整数部分和小数部分。,程序运行结束,计算机给出对应的二进制数。,二、案例分析,十进制数转换成二进制数时,必须将十进制数的整数部分和小数部分分开转换,然后再将转换后的二进制数的整数部分和小数部分结合即可。,十进制数整数部分转换时,采用除基取余法,直到商为零。方法为:将给定的十进制数除以基数,得到一个商数和余数,再将得到的商数除以基数,又得到一个商数和余数。继续这一过程,直到商数为零为止。在此过程中,每次得到的余数就是该进制数中各位数字。其中,最先得到的余数为最低有效位,最后得到的余数为最高有效位。,例如,将十进制数254转换成二进制数的过程如下:,所以,254D1111 1110B。,十进制数小数部分转换时,采用乘基取整法,直到小数部分为零或达到精度要求为止。方法为:用基乘以给定的十进制数的纯小数部分,取出乘积的整数部分,再用余下的纯小数部分乘以基,取出乘积的整数部分。继续这一过程,直到余下的纯小数部分为0或达到精度要求为止。最后把每次得到的整数部分从上到下依次取出,从左到右排列,得到对应的二进制数、八进制数、十六进制数。,例如,将十进制数0.687 5转换成二进制数的过程如下:,小数部分为0,转换结束。,所以,0.687 5D0.1011B。,二者合成为:254.687 5D1111 1110.1011B。,在转换过程中,整数部分是一定可以完全转换的;但是在小数部分进行转换时,有些小数是不能完全转换的。例如,十进制小数“0.2”转换为二进制时,不管乘了多少次的基数2,都不会只得到整数。一般遇到这种情况,在手动进行计算时只要取小数点后68位即可。,本案例采用两个字符数组,分别对输入的十进制数的整数部分和小数部分进行处理。,三、案例设计,函数的设计,根据上述的设计思想,本案例设计了3个函数,函数DtoB ()用于将十进制数的整数部分和小数部分分开;函数DtoBI ()用于将十进制数的整数部分转换成二进制的整数;函数DtoBF ()用于将十进制数的小数部分转换为二进制的小数。,(1)将输入数的整数部分和小数部分分开的函数,DtoB(),定义DtoB()函数的类型为void型,定义双精度变量num作为形参接收主函数调用函数时传递的十进制原数据。,在函数中,将用户输入的十进制数使用强制类型转换得到整数部分,原数减去整数部分即可得到小数部分,定义整型变量inum用于存储原数据的整型部分,定义双精度变量fnum用于存储原数据中的小数部分。函数中嵌套调用了DtoBI(inum),函数和,DtoBF(fnum),函数,用于将整数和小数部分分别转换为对应的二进制数。,将十进制的整数部分转换为二进制的整数的函数DtoBI(),定义DtoBI()函数的类型为void型,定义整型变量inum作为形参接收,DtoB()函数调用时传递的实参值。,在函数中,定义一个包含50个字符的整型数组str50,语句stri=inum%2用于将得到的余数存储在该整型数组中,语句bini,j,1=strj+48用于将存储在数组str中的反序余数再次反序,从而得到正序数据并存储在整型数组bin中。,将十进制的小数部分转换为二进制的小数的函数DtoBF(),定义DtoBF()函数的类型为void型,定义双精度变量fnum作为形参接收,DtoB()函数调用时传递的实参值。,该函数中使用的语句与DtoBI()函数的语句很类似,为了避免重复,可以使用字符串拷贝函数strcpy()完成赋值。使用语句int(fnum)+48可以将整型数据转换成字符型。整型变量i的最大值设为9,用于控制循环次数,设定小数的保留位数。,主程序设计,主程序流程如图所示。,五、案例总结与提高,案例总结,本案例采用字符数组实现了十进制数向二进制数的转换。对于一个既包含整数部分又包含小数部分的十进制数,需要分开后分别转换。,使用字符数组而不使用整型数组的理由是字符数组以“0”作为结束符,容易处理,但字符数字和整型数字之间的ASCII码相差48,需要注意。,案例提高,本案例只能进行十进制数向二进制数的转换,请读者修改本案例,实现二进制数向十进制数的转换。,
展开阅读全文