十进制转二进制:
算法部分:主要是整数和小数
1.整数部分:遵循除2取余(先得到的离小数点近)
结束规则:被除数为0
方法:先将浮点数(number)的整数部分(number1)拿出来单独处理,在循环中进行操作取余,除2。当number1等于0时结束循环,将得到的值figure也就是取余得到的值进行*k相加,打印sum(*k的意义是将得到的数字按顺序排列,即实现“先得到的离小数点最近法则”)
2.小数部分:遵循乘2取整(先得到的离小数点近)
结束规则:无小数部分,最后结果是1.00
方法:先将浮点数减去整数部分得到小数部分(number2),小数部分在循环中进行操作:乘2,取整,打印,再循环。跳出循环条件:number2等于0(和上面的结束规则等于1不同,这里是要跳出循环的条件不同)
程序设计部分:
number:用户输入的十进制部分(浮点型)
number1:单独处理的整数部分
number2:单独处理的小数部分
number3:中间量(需要打印的部分)
float:中间量(需要打印的部分,需要借助k实现”越先得到的离小数点最近“)
sum:整数部分中完成”越先得到的离小数点最近“这一目标的辅助项
k:整数部分中完成”越先得到的离小数点最近“这一目标的辅助项
思考:程序=算法+数据结构
在学习C语言时注重的是算法,当然C语言结构也很重要,结构体现了程序化设计的思维
不足:只能实现十进制转二进制,而且只能使用一次
十进制转N进制:
整数部分:遵循除N取余(先得到的离小数点近)
小数部分:遵循乘N取整(先得到的离小数点近)
N进制转十进制:
按权相加:整数部分由小数点左右开始每一位都乘N的次方
但整数是从0开始小数是从-1开始
(例:二进制转十进制:1100.101——1*2^3+1*2^2+0*2^1+0*2^0+1*2^-1+0*2^-2+1*2^-3)
二进制与八进制之间的转化:按8421BCD码三位三位进行换算
二进制与十六进制之间的转化:按8421BCD码四位四位进行换算
在思考上面的不足发现可以将两个不足合起来,构成一个进制转换软件
等待后续......
#include<stdio.h>
int main()
{
int number1,figure,k=1,sum=0, number3;
float number, number2;
printf("请输入十进制数字:");
scanf("%f", &number);
number1 = (int)number;
number2 = number - number1;
while (number1 != 0)
{
figure = number1 % 2;
number1 = number1 / 2;
sum = sum + figure*k;
k = k * 10;
}
printf("输出二进制数字:%d.", sum);
while (number2!=0)
{
number2 = number2 * 2;
number3 = (int)number2;
printf("%d", number3);
number2 = number2 - number3;
}
return 0;
}