用c语言反转数组怎么才可以不去除0
时间: 2024-10-04 07:04:32 浏览: 25
在C语言中,反转数组而不移除0可以按照以下步骤进行:
首先,创建一个临时数组用于存储原数组的内容。然后,遍历原数组,将每个元素添加到临时数组的对应位置,同时注意如果遇到0,则将其保留在相应的位置。
```c
#include <stdio.h>
void reverseArray(int arr[], int n) {
int temp[n]; // 创建临时数组
int i = 0, j = n - 1; // 定义两个指针
while (i < j) { // 只要i小于j就继续循环
if (arr[i] == 0 && arr[j] == 0) { // 如果两边都是0,都保留
i++;
j--;
} else if (arr[i] == 0 || arr[j] == 0) { // 如果一边是0,另一边不是0,也保留
temp[i++] = arr[j];
temp[j--] = 0;
} else {
temp[i++] = arr[i]; // 非0元素交换
temp[j--] = arr[j];
}
}
// 将反转后的元素复制回原数组
for (int k = 0; k < n; k++) {
arr[k] = temp[k];
}
}
// 测试函数
int main() {
int arr[] = {1, 2, 0, 3, 0, 4, 0};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
reverseArray(arr, size);
printf("\nReversed array with zeros: ");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
当你运行上述程序,它会打印出原始数组及其反转后的版本,包括所有的0。
阅读全文