擽陈 2022-12-10 12:29 采纳率: 50%
浏览 32
已结题

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

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条回答 默认 最新

  • ShowMeAI 2022-12-10 12:39
    关注

    望采纳

    问题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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关