从键盘读入n个整数放入数组中,编写函数compactintegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,compactintegers函数需要接受数组及其元素个数作为参数,函数
时间: 2023-04-18 18:03:46 浏览: 76
的返回值为删除后的数组元素个数。
实现思路:
1. 定义一个变量count,用于记录删除后的数组元素个数,初始值为。
2. 遍历数组,如果元素不为,则将其移动到数组首端,同时count加1。
3. 遍历结束后,将数组末尾的count个元素置为。
4. 返回count。
代码实现:
int compactintegers(int arr[], int n){
int count = ;
for(int i=; i<n; i++){
if(arr[i] != ){
arr[count] = arr[i];
count++;
}
}
for(int i=count; i<n; i++){
arr[i] = ;
}
return count;
}
相关问题
C语言指针编写函数,建立n个整形元素的一维数组,求所有元素的平均值,输出平均值以上的元素。
可以按照以下步骤编写函数:
1. 定义函数,传入整数n和整形指针arr作为参数。
2. 在函数中使用动态内存分配函数calloc()分配n个整形空间,将返回的指针赋给arr。
3. 循环读入n个整数,将其存储到arr数组中。
4. 计算所有元素的平均值sum,使用for循环遍历数组,累加每个元素的值,然后除以n。
5. 使用for循环遍历数组,输出所有大于平均值的元素。
以下是C语言代码示例:
```c
#include<stdio.h>
#include<stdlib.h>
void above_average(int n, int* arr){
int i, sum = 0;
double average;
for(i = 0; i < n; i++){
scanf("%d", &arr[i]);
sum += arr[i];
}
average = (double)sum / n;
printf("The average is %.2lf\n", average);
printf("Elements above average are: ");
for(i = 0; i < n; i++){
if(arr[i] > average){
printf("%d ", arr[i]);
}
}
}
int main(){
int n, *arr;
printf("Enter the number of elements: ");
scanf("%d", &n);
arr = (int*)calloc(n, sizeof(int));
above_average(n, arr);
free(arr);
return 0;
}
```
注意,在使用完动态分配的空间后,应该使用free()函数释放内存。
题目描述:有n个整数,要求你编写一个函数使其向右循环移动m个位置,用指针实现数组循环移动。编写c程序
以下是一个示例程序,可以实现用指针实现数组循环移动:
```c
#include <stdio.h>
void rotate(int *arr, int n, int m);
int main() {
int n, m;
printf("请输入整数个数n:");
scanf("%d", &n);
int arr[n];
printf("请输入%d个整数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("请输入向右循环移动的位数m:");
scanf("%d", &m);
rotate(arr, n, m);
printf("循环移动后的数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void rotate(int *arr, int n, int m) {
int temp[m];
for (int i = n - m; i < n; i++) {
temp[i - (n - m)] = arr[i];
}
for (int i = n - 1; i >= m; i--) {
arr[i] = arr[i - m];
}
for (int i = 0; i < m; i++) {
arr[i] = temp[i];
}
}
```
该程序首先从标准输入读入整数个数n,并根据n定义一个长度为n的数组arr。接着,使用循环遍历数组,输入每个元素的值。然后,从标准输入读入向右循环移动的位数m。
程序中定义了一个名为rotate的函数,用于实现数组的循环移动。该函数接受三个参数:指向数组首元素的指针arr、数组的长度n,以及向右循环移动的位数m。函数首先定义一个长度为m的临时数组temp,用于存储要移动的元素。接着,使用循环将数组arr中后m个元素复制到temp数组中。接下来,再使用循环将数组arr中前n-m个元素向右移动m个位置。最后,使用循环将temp数组中的元素复制回数组arr中前m个位置。
在主函数中调用rotate函数,完成数组的循环移动。最后,使用循环遍历数组,输出移动后的每个元素的值。