从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素
时间: 2024-05-10 15:17:27 浏览: 88
以下是一个 C++ 的程序实现:
```cpp
#include <iostream>
using namespace std;
int main() {
const int MAXN = 10000; // 数组最大长度
int a[MAXN], n; // 数组 a 和元素个数 n
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int k = 0; // 记录非零元素的个数
for (int i = 0; i < n; i++) {
if (a[i] != 0) {
a[k++] = a[i];
}
}
cout << k << endl;
for (int i = 0; i < k; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
该程序首先读入元素个数 `n` 和数组元素,然后遍历数组,将非零元素向数组首端移动,并记录非零元素的个数 `k`。最后输出 `k` 和删除后的数组元素。
相关问题
从键盘读入n个整数放入数组中,删除数组中所有值为0的元素,其后元素向数组首端移动,输出删除后数组中元素的个数并依次输出数组元素。用c语言
可以使用两个指针,一个指向原数组,一个指向新数组,遍历原数组,将非零元素拷贝到新数组中,再将新数组的元素复制回原数组中。代码如下:
```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;
}
```
C语言:从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素。
在C语言中,你可以通过以下几个步骤实现这个功能:
1. 首先,你需要创建一个动态数组来存储输入的整数,因为n的大小可能是未知的。
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr; // 存储整数的指针
int n, i;
```
2. 然后,从键盘读取用户输入的n,并分配内存给数组。
```c
printf("请输入元素个数: ");
scanf("%d", &n);
arr = (int*) malloc(n * sizeof(int)); // 分配内存
```
3. 接着,循环读取n个整数并存入数组,同时检查是否为0,若为0则跳过。
```c
for (i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
if (arr[i] != 0) { // 如果不是0,则保留
continue;
}
}
```
4. 删除数组中所有值为0的元素后,更新元素个数。由于数组的实际长度已经减少了,可以简单地使用`i`作为新数组的长度。
```c
int count = i; // 更新元素个数
```
5. 输出元素个数以及剩余的非零元素。
```c
printf("删除后数组元素个数: %d\n", count);
// 输出元素
for (i = 0; i < count; ++i) {
printf("%d ", arr[i]);
}
6. 最后,记得释放之前分配的内存。
```c
free(arr);
return 0;
}
阅读全文