十进制转二进制-C语言

来源:百度知道 编辑:UC知道 时间:2024/06/08 09:33:07
我编的程序:
#include <stdio.h>
void main()
{
int i;
int j;
scanf("%d",&i);
while (i!=1)
{
j=i%2;
i=i/2;
printf("\r%d",j);
}
printf("\r1\n");
}

请问哪错了啊!!!

高手看一下!谢谢!不要用高级的面向对象什么的,我是初学着,不会。
\r不是让光标跳到最前吗?应该是正确的顺序啊。还有你,我是循环输出啊,为什么只有输出一个1?

你代码错误太多,while (i!=1)
应改为while (i!=0)而且余数应该倒序输出,你全给顺序输出了,而却有些繁琐的东西可以去掉。
#include <stdio.h>
void main()
{
int i,j,n=0,a[40];
scanf("%d",&i);
while (i!=0)
{n++;
j=i%2;
a[n]=j;
i=i/2;
}
for(i=n;i>=1;i--)
printf("%d ",a[i]);
}

由于十进制在转换为二进制的时候需要反序输出,你的这个程序是正续输出的,就不正确的恩,就需要定义一个数组的呢。
现给你一个更加完整的程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
int i=0,j,a[30],b[30],k,c=0;
double m,x,d;
printf("请输入需要转换的数:");
scanf("%lf",&x);
if(x<0)
m=fabs(x);
else
m=x;
k=(int)m;//强制类型转换,可以使用k=(int)m;代替,从而更加的一目了然
while(k)//判定需要转换的数是否变为0
{
a[i++]=k%2;//取余,进行进制转换,但是顺序与正确值相反
k/=2;//转换一位之后进行相应的变化
}
if(m!=(int)m)//选择性计算,如果是整数就不用进行这一步的计算了,这样可以节约程序的运行时间
{
d=m-(int)m;//取小数部分
while(d!=0)
{
b[c]=(int)(d*2);//算法为