lzy_lover_sun 2020-12-09 19:19 采纳率: 0%
浏览 802

【C语言】实现数组奇偶分离。

具体要求

(a) 编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有四个参数:整型数组、数组长度、两个指针(用于返回奇、偶数的个数)。

(b) 利用(a)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是对给定长度的一个整型数组,找出其中的所有奇数和偶数,并把它们分别保存在两个新的整型数组中(用malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有六个,即整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。

(c) 编写main函数,输入一个整形数组,然后调用(b)中的Partition函数,并将其返回结果显示出来。

输入

程序的输入:2行,第一行是数组的长度,第二行是整形数组中的元素,以空格分离;

输出

程序的输出:2行,第一行是奇数数组的元素,空格分隔;第二行偶数数组的元素,空格分隔;其中元素的先后关系与原数组一致。

 

  • 写回答

1条回答 默认 最新

  • 芣苢的成长之路 2023-06-27 00:48
    关注
    
    #include <stdio.h>
    #include <stdlib.h>
    
    // 统计奇数和偶数的个数
    void CountEvensAndOdds(int arr[], int length, int* evensCount, int* oddsCount) {
        *evensCount = 0;
        *oddsCount = 0;
        
        for (int i = 0; i < length; i++) {
            if (arr[i] % 2 == 0) {
                (*evensCount)++;
            } else {
                (*oddsCount)++;
            }
        }
    }
    
    // 将奇数和偶数分离到两个新数组中
    void Partition(int arr[], int length, int** oddsArray, int* oddsLength, int** evensArray, int* evensLength) {
        int oddsCount, evensCount;
        CountEvensAndOdds(arr, length, &evensCount, &oddsCount);
    
        *oddsLength = oddsCount;
        *evensLength = evensCount;
        
        *oddsArray = (int*)malloc(oddsCount * sizeof(int));
        *evensArray = (int*)malloc(evensCount * sizeof(int));
        
        int oddsIndex = 0;
        int evensIndex = 0;
        
        for (int i = 0; i < length; i++) {
            if (arr[i] % 2 == 0) {
                (*evensArray)[evensIndex++] = arr[i];
            } else {
                (*oddsArray)[oddsIndex++] = arr[i];
            }
        }
    }
    
    int main() {
        int length;
        scanf("%d", &length);
    
        int* arr = (int*)malloc(length * sizeof(int));
        for (int i = 0; i < length; i++) {
            scanf("%d", &arr[i]);
        }
    
        int* oddsArray;
        int oddsLength;
        int* evensArray;
        int evensLength;
    
        Partition(arr, length, &oddsArray, &oddsLength, &evensArray, &evensLength);
    
        for (int i = 0; i < oddsLength; i++) {
            printf("%d ", oddsArray[i]);
        }
        printf("\n");
    
        for (int i = 0; i < evensLength; i++) {
            printf("%d ", evensArray[i]);
        }
        printf("\n");
    
        free(arr);
        free(oddsArray);
        free(evensArray);
    
        return 0;
    }
    
    

    以上代码中使用了动态内存分配函数malloc来创建奇数和偶数数组,因此在程序结束时需要使用free函数释放分配的内存空间,以避免内存泄漏。

    评论

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程