请朋友求解一下以下三个问题

1,main0函数里用malloc函数实现一个动态整型数组,数组长度由键盘输入,然后键盘输入各个数组元素的值。编写一个无返回值函数void find( int all,int x,int size, int
*sum, int xtotal)求该数组里面所有能被整数整除的元素之和以及其个数,用sum接收
元素之和,total接收元素个数。这里size为数组a的长度.

2,编写函数 void Afunc(int *p,int size)(size为数组长度,p为指向数组的指针)将一数组中的零元移至数组未尾,将非零元素移至数组开始,然后对非零元排序。
例如:int a11=$12,0,31,14,5,0,0,17,0,123
主函数里调用Afunc(a,10)处理后a数组为:{-12,5,12,14,17,31,0,0,0}

3,编写函数int get(int pll,int a,int size)在有序数组查找数组p中是否存在值为a的整数,如存在,输出该元素的位置(这里认为al0的位置为1),否则输出0。这里size为
L数组p的长度
例如:int data11=5-12.5.12,14,17.31,42.551

望采纳

问题1

#include <stdio.h>
#include <stdlib.h>

void find(int all, int x, int size, int *sum, int *total) {
  *sum = 0;
  *total = 0;
  for (int i = 0; i < size; i++) {
    if (all[i] % x == 0) {
      *sum += all[i];
      (*total)++;
    }
  }
}

int main() {
  int size;
  printf("输入数组的大小:");
  scanf("%d", &size);
  int *all = malloc(size * sizeof(int));
  if (all == NULL) {
    printf("分配数组内存时出错\n");
    return 1;
  }
  printf("输入数组的各个元素:");
  for (int i = 0; i < size; i++) {
    scanf("%d", &all[i]);
  }
  int x;
  printf("输入一个整数,以便对数组中的元素进行除法:");
  scanf("%d", &x);
  int sum, total;
  find(all, x, size, &sum, &total);
  printf("被 %d 整除的数组元素之和为 %d,共有 %d 个\n", x, sum, total);
  free(all);
  return 0;
}

问题2

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

void Afunc(int *p, int size) {
  int zeros = 0;
  for (int i = 0; i < size; i++) {
    if (p[i] == 0) {
      zeros++;
    } else {
      p[i - zeros] = p[i];
    }
  }
  for (int i = size - zeros; i < size; i++) {
    p[i] = 0;
  }
  qsort(p, size - zeros, sizeof(int), cmpfunc);
}

int cmpfunc(const void *a, const void *b) {
  return (*(int*)a - *(int*)b);
}

int main() {
  int size = 10;
  int *a = malloc(size * sizeof(int));
  if (a == NULL) {
    printf("分配数组内存时出错\n");
    return 1;
  }
  a[0] = 12;
  a[1] = 0;
  a[2] = 31;
  a[3] = 14;
  a[4] = 5;
  a[5] = 0;
  a[6] = 0;
  a[7] = 17;
  a[8] = 0;
  a[9] = 123;
  Afunc(a, size);
  printf("修改后的数组:");
  for (int i = 0; i < size; i++) {
    printf("%d ", a[i]);
  }
  printf("\n");
  free(a);
  return 0;
}

问题3

#include <stdio.h>
#include <stdlib.h>

int get(int *pll, int a, int size) {
  int low = 0;
  int high = size - 1;
  while (low <= high) {
    int mid = low + (high - low) / 2;
    if (pll[mid] == a) {
      return mid + 1;
    } else if (pll[mid] > a) {
      high = mid - 1;
    } else {
      low = mid + 1;
    }
  }
  return 0;
}

int main() {
  int size = 9;
  int *pll = malloc(size * sizeof(int));
  if (pll == NULL) {
    printf("分配数组内存时出错\n");
    return 1;
  }
  pll[0] = -12;
  pll[1] = 5;
  pll[2] = 12;
  pll[3] = 14;
  pll[4] = 17;
  pll[5] = 31;
  pll[6] = 42;
  pll[7] = 55;
  pll[8] = 123;
  int a = 55;
  int result = get(pll, a, size);
  if (result == 0) {
    printf("数组中没有值为 %d 的整数\n", a);
  } else {
    printf("数组中值为 %d 的整数的位置是 %d\n", a, result);
  }
  free(pll);
  return 0;
}