帮我写一个从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素的代码
时间: 2024-05-13 18:16:02 浏览: 81
好的,请看下面的代码实现:
```c
#include <stdio.h>
#define MAX_N 100 // 数组最大长度
int main() {
int n, arr[MAX_N], non_zero_cnt = 0; // non_zero_cnt表示非零元素的个数
// 读入n和数组元素
printf("请输入数组长度n: ");
scanf("%d", &n);
printf("请输入%d个整数: ", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
if (arr[i] != 0) non_zero_cnt++; // 统计非零元素个数
}
// 删除数组中所有值为0的元素,其后元素向数组首端移动
int i = 0, j = 0;
while (i < non_zero_cnt) {
if (arr[j] == 0) {
for (int k = j; k < n - 1; k++) { // 后面元素向数组首端移动
arr[k] = arr[k + 1];
}
n--; // 数组长度减1
} else {
i++;
j++;
}
}
// 输出删除后数组中元素的个数并依次输出数组元素
printf("删除后数组中元素的个数为%d, 数组元素为: ", non_zero_cnt);
for (int i = 0; i < non_zero_cnt; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该程序先读入数组长度n和数组元素,然后统计非零元素个数。接着利用双指针i和j来遍历数组,当arr[j]为0时,将其后面的元素向数组首端移动,同时将数组长度减1;当arr[j]不为0时,i和j都加1。最后输出删除后数组中元素的个数和数组元素。
阅读全文