int A[nSize],其中隐藏着若干 0,其余非 0 整数,写一个函数 int Func(int* A, int nSize), 使 A 把 0 移至后面

43 阅读1分钟
#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;
}

代码说明

  1. 变量声明

    • nonZeroCount 用于记录非零元素的数量。
  2. 移动非零元素

    • 使用一个 for 循环遍历数组 A
    • 如果当前元素 A[i] 不为 0,则将其移动到 A[nonZeroCount] 位置,并增加 nonZeroCount
  3. 填充 0

    • 使用另一个 for 循环从 nonZeroCount 开始,将剩余位置填 0。
  4. 返回值

    • 返回 nonZeroCount,即第一个 0 的下标。
  5. 测试

    • 在 main 函数中定义一个示例数组 A,调用 Func 函数并输出处理后的数组和第一个 0 的下标。