求高手帮忙改个简单的程序,可能是低级的错误,但是就是找不出是哪里错了,运行出来的结果怪怪的。。。

#include<stdio.h>voidmain(){inta,b=0,c=0,i=0;intL[100];printf("Pleaseinputthenumberwh... #include<stdio.h>
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;
}
}
展开
 我来答
貌似風輕
2013-04-19 · TA获得超过7282个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:849万
展开全部

你这是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");

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式