这个程序怎样解释啊?

来源:百度知道 编辑:UC知道 时间:2024/05/15 02:26:07
#include<stdio.h>
void main ()
{int i,j,a[10]={2,3,4,5,6,7};
for(i=0;i++<4;)
{j=a[i];a[i]=a[5-i];a[5-i]=j;}
for(i=0;i<6;i++)
printf ("%d",a[i]);
}

本人菜鸟,这是一道作业题目
为什么a[0]不交换啊, a[0]=7,a[5]=2 ???

打印结果是234567

for循环开始时i=0,进行i++<4时,是先i跟4比较,不管结果如何,在执行i=i+1
然后以新得的i值进入循环体参与运算,循环体里的运算是进行两数间的数值对换,j是中间变量,如j=a,a=b,b=j,这样就对换了,过程为:
第一次:i=0 i=i+1=1 j=a[1]=3,a[1]=a[4]=6,a[4]=j=3 :a[1]=6 a[4]=3(数组第一个从0开始)
第二次:i=1 i=i+1=2 j=a[2]=4,a[2]=a[3]=5,a[3]=j=4 :a[2]=5 a[3]=4

第三次:i=2 i=i+1=3 j=a[3]=4,a[3]=a[2]=5,a[2]=j=4 :a[2]=4 a[3]=5

第四次:i=3 i=i+1=4 j=a[4]=3,a[4]=a[1]=6,a[1]=j=3 :a[1]=3 a[4]=6

最后结果为:a[0]=2 a[1]=3 a[2]=4 a[3]=5 a[4]=6 a[5]=7
输出为:234567 与原数组一样 而此时的i值为5

打印出来的还是2,3,4,5,6,7,
在for循环里头,a[1]与a[4]值交换,即a[1]=6,a[4]=3;
a[2]与a[3]交换,a[2]=5,a[3]=4
a[3]与a[2]交换, a[2]=4,a[3]=5
a[4]与a[1]交换,a[1]=3,a[4]=6
所以最后是与初 始化数组一样,没有改变