当前位置: 代码迷 >> C语言 >> [求助]一道有关循环和数组的程序不太明白.希望得到帮助.
  详细解决方案

[求助]一道有关循环和数组的程序不太明白.希望得到帮助.

热度:344   发布时间:2006-10-04 20:02:52.0
[求助]一道有关循环和数组的程序不太明白.希望得到帮助.
当从键盘输入18时,下面的程序的运行结果是
main()
{ int x,y,i,a[8],,j,u;
scanf("%d",&x);
y=x; i=0;
do
{ u=y/2
a[i]=y%2;
i++;y=u;
} while(y>=1);
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
答案是10010


do
{ u=y/2
a[i]=y%2;
i++;y=u;
} while(y>=1);
这几步程序我还勉强能理解,就是u=18/2=9
然后a[0]=0,因为9/2余数是0,然后i变成1,y变成9/2
以此类推,得出a[1]=1,a[2]=1,a[3]=1,
然后就不知道怎么办了?
搜索更多相关的解决方案: 键盘  

----------------解决方案--------------------------------------------------------
y=18;
1.u=y/2=9;a[0]=18%2=0;y=9;(y>=1)
2.u=y/2=4;a[1]=9%2=1;y=4;(y>=1)
3.u=y/2=2;a[2]=4%2=0;y=2;(y>=1)
4.u=y/2=1;a[3]=2%2=0;y=1(y>=1)
5.u=y/2=0;a[4]=1%2=1;y=0(y<1)
结束循环此时的i==5
输出a[i-1]---a[0]则是10010

----------------解决方案--------------------------------------------------------
1.u=y/2=9;a[0]=18%2=0;y=9;(y>=1)
2.u=y/2=4;a[1]=9%2=1;y=4;(y>=1)
关于第2步,9/2=4.5,因为是整型,所以就默认为4了,对不对?
----------------解决方案--------------------------------------------------------
对.也说不上是默认了./运算的结果你就理解为整除成的商,而%的结果就认为是余数.
----------------解决方案--------------------------------------------------------
再请教一道题目
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i,k;
k=a[8];
for(i=8;i>=3;i--)
a[i+1]=a[i];
a[3]=k;
for(i=0;i<10:i+=2)
printf("%d",a[i]);
运行结果是13468

a[8]是9,所以k=9
a[9]=a[8]推出a[9]=9
然后是a[8]=a[7]
之后我推不下去了
----------------解决方案--------------------------------------------------------
数组交换的过程,交换之前保存了a[8]=9的值
i的范围是[3,8]

a[8]的值给a[9]
a[7]的值给a[8]
a[6]的值给a[7]
a[5]的值给a[6]
a[4]的值给a[5]
a[3]的值给a[4]
此时的序列为:
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
1 2 3 4 4 5 6 7 8 10

然后a[3]=k即a[3]=9
把上述序列的a[3]=4换成a[3]=9就行了
然后从格两个以输出不就是
1 3 4 6 8
----------------解决方案--------------------------------------------------------
以下是引用inku在2006-10-4 22:26:09的发言:
再请教一道题目
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i,k;
k=a[8];
for(i=8;i>=3;i--)
a[i+1]=a[i];
//1 2 3 3 4 5 6 7 8 9
a[3]=k;
//1 2 3 9 4 5 6 7 8 9
for(i=0;i<10:i+=2)
printf("%d",a[i]);
运行结果是13468

a[8]是9,所以k=9
a[9]=a[8]推出a[9]=9
然后是a[8]=a[7]
之后我推不下去了


----------------解决方案--------------------------------------------------------

以下是引用unicorn在2006-10-4 22:40:06的发言:
数组交换的过程,交换之前保存了a[8]=9的值
i的范围是[3,8]

a[8]的值给a[9]
a[7]的值给a[8]
a[6]的值给a[7]
a[5]的值给a[6]
a[4]的值给a[5]
a[3]的值给a[4]
此时的序列为:
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
1 2 3 4 4 5 6 7 8 10

然后a[3]=k即a[3]=9
把上述序列的a[3]=4换成a[3]=9就行了
然后从格两个以输出不就是
1 3 4 6 8

这下豁然开朗了,谢谢!
----------------解决方案--------------------------------------------------------

以下是引用inku在2006-10-4 23:12:20的发言:

这下豁然开朗了,谢谢!

不觉得他的是错误的吗?

main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i,k;
k=a[8];
for(i=8;i>=3;i--)
a[i+1]=a[i];
a[3]=k;
for(i=0;i<10;i++)
printf("%d ",a[i]);
getch();
}

1 2 3 9 4 5 6 7 8 9

[此贴子已经被作者于2006-10-4 23:42:37编辑过]


----------------解决方案--------------------------------------------------------
以下是引用nuciewth在2006-10-4 23:42:09的发言:

不觉得他的是错误的吗?

main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i,k;
k=a[8];
for(i=8;i>=3;i--)
a[i+1]=a[i];
a[3]=k;
for(i=0;i<10;i++ )
printf("%d ",a[i]);
getch();
}

1 2 3 9 4 5 6 7 8 9



你题看错了

程序代码:
for(i=0;i<10;i+=2)


----------------解决方案--------------------------------------------------------
  相关解决方案