
求高手帮忙改个简单的程序,可能是低级的错误,但是就是找不出是哪里错了,运行出来的结果怪怪的。。。
void main()
{
int a,b=0,c=0,i=0;
int L[100];
printf("Please input the number what you want to transfer:\n");
scanf("%d",&a);
for(;a>=1;a=a/2)
{
b=a%2;
L[i]=b;
c=a/2;
b=c;
i=i+1;
}
while(i>=0)
{
printf("%d",L[i]);
i=i-1;
}
} 展开
你这是10进制转2进制数的程序吧
c=a/2;
b=c;
这两句无意义,建议删掉
至于运行结果出问题,是数组下标没处理好
在for循环中,我举个例子说明下问题所在。
假设现在 执行到了
L[5]=b; // i=5
之后 i = i+1 = 6
然后判断for循环条件是否满足,如果这时候不满足,则for循环结束
此时 i = 6,而L[6] 并没有赋值
在你的输出的地方
while(i>=0)
{
printf("%d",L[i]); // i=6,5,4……0
i=i-1;
}
而这里会从L[6]开始输出,而本来L[6]是不用输出的,并且L[6]没有赋值却输出L[6],所以会出现结果显示有问题。
这里可以在while循环前加一句:i=I-1;
下面是我在你的代码基础上修改后的代码:
#include<stdio.h>
void main()
{
int a,i=0;
int L[100];
printf("Please input the number what you want to transfer:\n");
scanf("%d",&a);
while(a!=0)
{
L[i++]=a%2;
a=a/2;
}
for(i=i-1;i>=0;i--)
printf("%d",L[i]);
printf("\n");
}