C语言 关于数组的问题~~~

来源:百度知道 编辑:UC知道 时间:2024/06/18 01:46:58
有一道题,编程是这样的:
#define N 10
main()
{int i,j,t,a[N]={1,2,3,4,5,6,7,8,9,1};
i=3,j=6;
while(i<j)
{t=a[i];a[i]=a[j];a[j]=t;i++;j--;}
for(i=0;i<N;i++)printf("%d",a[i]);
}
结果是:1237654891
结果是怎么来的?求高手讲解

t=a[i];a[i]=a[j];a[j]=t;这三句是让a[i]和a[j]的值进行交换
在while这个循环里面,先是a[3]与a[6]的值进行交换,于是a[3]=7,a[6]=4,然后i++;j--;a[4]与a[5]的值进行交换,于是a[4]=6,a[5]=5
之后进入for的循环,输出a[0]到a[9]的值
a[0]=1,a[1]=2,a[3]=7,a[4]=6,a[5]=5,a[6]=4,a[7]=8,a[8]=9,a[9]=1
于是得出结果~~

首先i 3
j 6
然后开始循环
交换a[3] 和a[6](此时的a[3]就是第4个数“4”,c++的数组下标是从0开始的)
下面交换a[4] a[5]
然后就不满足 i<j了
跳出循环
输出1237654891

while(i<j)循环的作用是将a[3]与a[6]交换,a[4]与a[5]交换。每次循环都会将i值增1,j值减1,所以循环体只执行两次。

while 第一次循环中 i=3 a[3]=4 j=6 a[6]=7
用t=a[i];a[i]=a[j];a[j]=t进行a[3]和a[6]对调 i++;j--;
while 第二次循环中 i=4 a[4]=5 j=5 a[5]=6
用t=a[i];a[i]=a[j];a[j]=t进行a[4]和a[5]对调 i++;j--; 这时 i=6 j=5 i>j跳出循环
所以得出以上数据

先来看循环几次
i=3.j=6循环一次后
i=4.j=5再循环一次后
i=5j=4所以跳出

也疑是循环两次。换句话也就是换了两次的值。
第一次换
a[3] a[6]
第二次换
a[4]a[5]
所以4和7换了位置。5和6换了位置。因此疑是最后的答案