关于#c语言#的问题:用c语言给定一个整数数组nums

用c语言给定一个整数数组nums,将所有0移动到数组末尾,同时保持非0元素的相对顺序

#include <stdio.h>

void moveZeroes(int* nums, int numsSize);

int main() 
{
    int nums[] = {0, 1, 0, 3, 12};
    int numsSize = sizeof(nums) / sizeof(nums[0]);

    printf("原始数组:\n");
    for (int i = 0; i < numsSize; i++) {
        printf("%d ", nums[i]);
    }
    printf("\n");

    moveZeroes(nums, numsSize);

    printf("移动 0 后的数组:\n");
    for (int i = 0; i < numsSize; i++) {
        printf("%d ", nums[i]);
    }
    printf("\n");

    return 0;
}

void moveZeroes(int* nums, int numsSize) {
    int i, j, temp;
    for (i = 0, j = 0; i < numsSize; i++) {
        if (nums[i] != 0) {
            temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
            j++;
        }
    }
}

仅供参考

img

img

img

#include <stdio.h>
#define N  10
int main()
{
    int arr[N] = { 0 }, t, i, j;
    for (i = 0, j = 0; i < N; i++)
    {
        scanf("%d", &t);
        if (t)
            arr[j++] = t;
    }
    for (i = 0; i < N; i++)
        printf("%d ", arr[i]);

    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#include <stdio.h>
int main()
{  
    int a[10],i,j=0;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=0;i<10;i++)
    {
        if(a[i] != 0)
            a[j++] = a[i];
    }
    for(i=j;i<10;i++)
        a[i] = 0;
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
}