编写一个C语言代码:从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素。
时间: 2024-04-30 11:17:43 浏览: 21
好的,以下是代码实现:
```c
#include <stdio.h>
int main() {
int n, i, j, count = 0;
printf("请输入整数个数n:");
scanf("%d", &n);
int arr[n];
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
for (i = 0, j = 0; i < n; i++) {
if (arr[i] != 0) {
arr[j++] = arr[i];
count++;
}
}
printf("删除0后数组元素个数为:%d,数组为:", count);
for (i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
代码思路如下:
1. 读入整数个数 n,创建长度为 n 的整型数组 arr;
2. 从键盘输入 n 个整数并存入数组 arr 中;
3. 遍历数组 arr,若元素不为 0,则将该元素移动到数组头部,计数器 count 加 1;
4. 输出删除 0 后数组元素的个数 count,以及数组中的所有元素。
相关问题
c语言编程:从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素。
下面是一个简单的 C 语言代码实现:
```c
#include <stdio.h>
int main() {
int n, i, j, count = 0;
printf("请输入数组长度 n:");
scanf("%d", &n);
int arr[n]; // 定义数组
printf("请输入 %d 个整数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]); // 从键盘读入 n 个整数
if (arr[i] != 0) {
arr[count] = arr[i]; // 删除数组中所有值为 0 的元素,并将其后元素向数组首端移动
count++;
}
}
printf("删除后数组中元素的个数为:%d\n", count);
printf("删除后数组中的元素为:");
for (i = 0; i < count; i++) {
printf("%d ", arr[i]); // 依次输出数组元素
}
printf("\n");
return 0;
}
```
运行程序,输入数组长度和数组元素,即可输出删除后的数组元素。例如:
```
请输入数组长度 n:10
请输入 10 个整数:3 0 5 0 2 0 4 1 0 6
删除后数组中元素的个数为:5
删除后数组中的元素为:3 5 2 4 1
```
从键盘读入 n 个整数放入数组中,删除数组中所有值为 0 的元素,其后元素向数组首端移动。输出删除后数组中元素的个数并依次输出数组元素用c语言帮我写一个代码
以下是一个简单的实现:
```c
#include <stdio.h>
int main() {
int n;
printf("请输入数组中元素的个数:");
scanf("%d", &n);
int arr[n]; // 定义数组
printf("请输入数组中的元素:");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int count = 0; // 记录非零元素的个数
for (int i = 0; i < n; i++) {
if (arr[i] != 0) { // 非零元素
arr[count] = arr[i]; // 将元素移到数组前面
count++;
}
}
printf("删除后数组中元素的个数为:%d\n", count);
printf("删除后的数组为:");
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
注意,这里使用了动态数组,需要使用 C99 标准编译。如果使用老的 C89 标准,可以将 `int arr[n]` 改为 `int *arr = (int*)malloc(n * sizeof(int))`,然后在程序结束前释放内存,即 `free(arr)`。