#include <stdio.h>
int Func(int* A, int nSize) {
int nonZeroCount = 0; // 记录非零元素的数量
// 将非零元素移到数组前面
for (int i = 0; i < nSize; i++) {
if (A[i] != 0) {
A[nonZeroCount] = A[i];
nonZeroCount++;
}
}
// 将剩余位置填 0
for (int i = nonZeroCount; i < nSize; i++) {
A[i] = 0;
}
// 返回第一个 0 的下标
return nonZeroCount;
}
int main() {
int A[] = {1, 0, 2, 3, 0, 4, 5};
int nSize = sizeof(A) / sizeof(A[0]);
int firstZeroIndex = Func(A, nSize);
// 输出处理后的数组
printf("处理后的数组: ");
for (int i = 0; i < nSize; i++) {
printf("%d ", A[i]);
}
printf("\n");
// 输出第一个 0 的下标
printf("第一个 0 的下标: %d\n", firstZeroIndex);
return 0;
}
代码说明
-
变量声明:
nonZeroCount用于记录非零元素的数量。
-
移动非零元素:
- 使用一个
for循环遍历数组A。 - 如果当前元素
A[i]不为 0,则将其移动到A[nonZeroCount]位置,并增加nonZeroCount。
- 使用一个
-
填充 0:
- 使用另一个
for循环从nonZeroCount开始,将剩余位置填 0。
- 使用另一个
-
返回值:
- 返回
nonZeroCount,即第一个 0 的下标。
- 返回
-
测试:
- 在
main函数中定义一个示例数组A,调用Func函数并输出处理后的数组和第一个 0 的下标。
- 在