十进制转二进制-C语言

我编的程序:
#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]);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-24
由于十进制在转换为二进制的时候需要反序输出,你的这个程序是正续输出的,就不正确的恩,就需要定义一个数组的呢。
现给你一个更加完整的程序如下:
#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);//算法为×N取整
d=d*2-b[c];
c++;
if(c>=10)
break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环
}
}
printf("转换结果为:");
if(x<0)
printf("-");
for(j=i-1;j>=0;j--)//反序输出,大于10的数字进行相应的变化
{
printf("%d",a[j]);
}
if(m!=(int)m)//选择性输出,这样可以节约输出时间和程序的运行时间
{
printf(".");
for(j=0;j<c;j++)//正序输出
{
printf("%d",b[j]);
}
}
if(c>=10)//如果是无限小数则在后以省略号表示
printf("......");
printf("\n");//输出换行,以使程序的输出结果美观
}

详细的介绍请参看:
第2个回答  2009-03-24
纠正你个错误,面向对象一般指的是做软件,比如加一个什么控件等。你的最后一个1是必打出来的,也就是不管i是偶数还是奇数,总会打出个1来。所以是错误的,你把while(i!=1)改成while(i<1/2) 把最后的printf去了
第3个回答  2021-05-30

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网