首页 > 试题广场 >

void inplace_swap(int *x,int *

[问答题]
void inplace_swap(int *x,int *y){
*y=*x^*y;
*x=*x^*y;
*y=*x^*y;
}
在inplace_swap函数的基础上,你决定写一段代码, 实现将一个数组中的元素头尾两端依次对调。你写出下面这个函数:
1  void reverse_array(int a[], int cnt) {
2     int first, last;
3     for (first =0, last = cnt-1;
4     first <= last;
5     first++,last--)
6    inplace_swap(&a[first] , &a[last]);
7    }
当你对一个包含元素1、2、3和4的数组使用这个函数时,正如预期的那样,现在数 组的元素变成了 4、3、2和1。不过,当你对一个包含元素1、2、3、4和5的数组使 用这个函数时,你会很惊奇地看到得到数字的元素为5、4、0、2和1。实际上,你会 发现这段代码对所有偶数长度的数组都能正确地工作,但是当数组的长度为奇数时, 它就会把中间的元素设置成0。
A.对于一个长度为奇数的数组,长度cnt=2k+ 1,函数reverse_array最后一次 循环中,变量first和last的值分别是什么?
B.为什么这时调用函数inplace_swap会将数组元素设置为0?
C.对reverse_array的代码做哪些简单改动就能消除这个问题?
scsdv
发表于 2020-10-16 10:57:25 回复(0)