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;

}

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言求一个二维组每行每列的最大值 并放在一个新数组中 ,用指针做?
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");\/\/---获取每行...

c语言用指针找二维数组中的最大值和下标
void InputArray(int *p,int m,int n);int FindMax(int *p,int m,int n,int *pRow,int *pCol);int main(){ int a[10][10];int m,n;int max,r,c;printf("Input m,n:\\n");scanf("%d,%d",&m,&n);InputArray(a[0],m,n);max=FindMax(a[0],m,n,&r,&c);printf("max...

C语言 怎么用指针输出一个二维数组的全部值
C语言的数组(不管多少维)在内存中都是线性储存的。所以用一级指针加偏移就可以访问所有元素。举个例子,有一个10*10的二维数组a,这样就可以输出:int a[10][10];int *p = (int *)a;int i;for (i = 0; i < 10 * 10; i++)printf("%d", *(p + i));

C语言程序设计中"二维数组中元素指针的表示"的例题,求详解
⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。一个二维数组在计算机中存储时,是按行存储的,即先存储第一行的元素,再存储第二行的元素。当把每一行看作一个整体,即作为一个大的数组元素时,原来的二维数组也就变成一个一维数组了。而每个大数组...

C语言中二维数组行指针是什么
而 array 是二维数组的名字,它指向的是所属元素的首地址,其每个元素为一个行数组。它是以‘行’来作为指针移动单位的,如array+i 指向的是第 i 行。对 array 进行 * 运算,得到的是一维数组 array[0] 的首地址,所以 *array 与 array[0] 为同个值。如果定义 int* p,p为指int类型的...

C语言指针与二维数组求解
也就是说此处并不是定义数组,而只是个指针,而这个指针指向的变量不是普通的char,而是一个有三个元素的数组。你可以试试看sizeof(p)的值是多少,结果应该是4吧,会是个数组吗?你还可以输出一下p和p++的值,看看它们相差多少?应该是3吧! 这第三句就更简单了,一个简单的赋值语句,把二级指针a(也就是二维数组...

...型数组中最大的元素、最小元素以及所有元素的平均值(c语言指针...
void main(){ int i, max, min;float sum;int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};int *pa = &a[0][0];max = 0;min = 0;sum = 0.0;for (i = 0; i < sizeof(a) \/ sizeof(int); i++){ if (*pa > max){ max = *pa;} if (...

输入二维数组a[4][6],输出其中的最大值及其对应的行列位置 c语言...
int ans,maxij;ans=findmax(a[0],&maxij); \/\/看第一个参数 printf("\\nthe answer is a[%d][%d]=%d",maxij\/6,maxij%4,ans);} int findmax(int *p,int *p1){ \/\/将其当成一维数组对待 int m=p[0];for (int i=0;i<24;i++){ if (m<p[i]){m=p[i],*p1=i;...

C语言中二维数组的指针问题
假如:p=a 这是使指针p指向数组a的首行,当你输出*p这个值的时候,它输出的值是a[0][0]这个元素的值,但是当你执行p+1的时候,那么p就会指向数组a的序号为1的行,即指向了a[1][0]这个元素所在的行了。p始终指向数组a的行,而不指向列。虽然p=a[0] p=&a[0][0] p=a 这三个...

C语言用二维数组定义一个自定义函数数组的最大值?
以下是一个C语言程序,用二维数组定义一个自定义函数数组,并计算数组中的最大值:```c include <stdio.h> \/\/ 自定义函数,用于计算一个整数数组的最大值 int array_max(int arr[], int len) { int max = arr[0];for (int i = 1; i < len; i++) { if (arr[i] > max) { ...

相似回答