从键盘读入n个整数放入数组中,删除数组中所有值为0的元素,其后元素向数组首端移动,输出删除后数组中元素的个数并依次输出数组元素。用c语言
时间: 2023-08-12 22:16:33 浏览: 136
可以使用两个指针,一个指向原数组,一个指向新数组,遍历原数组,将非零元素拷贝到新数组中,再将新数组的元素复制回原数组中。代码如下:
```c
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[n], b[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int j = 0; // 指向新数组
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
b[j++] = a[i];
}
}
for (int i = 0; i < j; i++) {
a[i] = b[i];
}
printf("%d\n", j);
for (int i = 0; i < j; i++) {
printf("%d ", a[i]);
}
return 0;
}
```
注意,这里使用了变长数组,需要使用支持该特性的编译器。如果不支持,可以使用动态内存分配的方式,例如:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d", &n);
int *a = malloc(n * sizeof(int));
int *b = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int j = 0; // 指向新数组
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
b[j++] = a[i];
}
}
for (int i = 0; i < j; i++) {
a[i] = b[i];
}
printf("%d\n", j);
for (int i = 0; i < j; i++) {
printf("%d ", a[i]);
}
free(a);
free(b);
return 0;
}
```
阅读全文