C语言求一个二维组每行每列的最大值 并放在一个新数组中 ,用指针做?

如题所述

行列最大值,方法很多,一般循环遍历属于就可以了。

既然你要用指针来做,我就用指针来写。利用数组元素地址连贯性来做。

#include <stdio.h>

#define MXR 4//最大行数

#define MXC 3//最大列数

int main()

{

    int i=0,mr,mc,*p=NULL,*ps=NULL;

    int nums[MXR][MXC]={{8,6,7},{2,6,3},{1,4,2},{9,3,5}};

    int mrs[MXR],mcs[MXC];

    printf("原二维数组:\n8 6 7\n2 6 3\n1 4 2\n9 3 5\n");

//-----------------------获取每行最大值------------------------------------------------

    p=&nums[0][0],mr=*p;

    for(;p<=&nums[MXR-1][MXC-1];p++)

    {

        if(p>&nums[0][0]&&(p-&nums[0][0])%MXC==0)//如果指针换行,保存上一行最大值

        {

            mrs[i++]=mr;

            mr=*p;

        }

        if(mr<*p)

            mr=*p;

    }

    mrs[i]=mr;

//-----------------------获取每列最大值-----------------------------------------------------

    i=0,ps=&nums[0][0];

    while(ps<=&nums[0][MXC-1])

    {

        p=ps,mc=*p;

        while(p<=&nums[MXR-1][MXC-1])

        {

            if(mc<*p)

                mc=*p;

            p+=MXC;

        }

        mcs[i++]=mc;

        ps++;

    }

//---------------输出结果-----------------------------------------------------------------

    printf("每行最大值分别为: \n");

    for(i=0;i<MXR;i++)

        printf("%d ",mrs[i]);

    printf("\n每列最大值分别为: \n");

    for(i=0;i<MXC;i++)

        printf("%d ",mcs[i]);

    return 0;

}

温馨提示:答案为网友推荐,仅供参考