求一个数值转换的C语言程序,能够实现十进制分别与二进制,八进制,十六进制的转换,

整数
和小数部分都要实现。

两个进制(其中之一为10进制)之间的互转(手工计算方法)
以2,10进制互转为例,其他请举一反三:
二进制数1101转十进制:
1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13
附加一个八进制转十进制的例子吧:
507(八进制转10进制):
5×8的2次幂+0×8的1次幂+7×8的0次幂=
5×64+0×8+7×1=327(10进制)

以上是小进制向大进制的转换,从2->10和8->10,下面说说大进制向小进制的转换。(方法是相除去余)
10进制327转八进制:
327/8 = 40 余数为7
40/8 = 5 余数为0
于是八进制数为507(第一位5是最后的商)
10进制13转2进制:
13/2 = 6 余数为1
6/2 = 3 余数为0
3/2 = 1 余数为1
所以对应的二进制数为1101(第一位1是最后的商)

再测试一下,把307(10进制)转换为16进制:
307/16 = 19 余数为3
19/16 = 1 余数为3
对应的16进制数应该是:133
再把133转回10进制:
1×16的2次幂+3×16的1次幂+3×16的零次幂
=256+48+3=307
这是程序:
#include <stdio.h>
#define BASE 8 /*要转换成几进制数/*
#define DIGIT 100 /*转换数的位数/*
int main(void)
{
int i,input;
int x[DIGIT];
printf("Please enter(Enter q to quit)")
while(scanf("%d",&input)==1)
{
for (i=0;input!=0;input/=BASE)
x[i]%=input;
for (;i<0;i--)
printf("%d",x[i]);
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-20
假定要转换的数为a
十转八: printf(“%o\n",a);
十转十六: printf(“%x\n",a);
十转二: int main()
{
int a;
scanf("%d", &a);
int i=0;
int bin[32];

while(a>0)
{
bin[i]=a%2;
a/=2;
i++;
}
for(int j=i-1;j>=0;j--)
printf("%d",bin[j]);
}
挺简单的吧追问

谢谢你的回答!麻烦您再给我写一个程序,十进制转换成二进制,和二进制转换成十进制。整数部分和小树部分都要有。谢谢了!

相似回答