c语言找二维数组中的最大值以及下标

按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。
void InputArray(int *p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);

输入提示信息:
"Input m, n:"
"Input %d*%d array:\n"
输入格式:"%d,%d"
输出提示信息和格式:"max = %d, row = %d, col = %d\n"

程序运行示例:
Input m, n:3,3↙
Input 3*3 array:
3 4 5↙
6 8 6↙
9 7 2↙
max = 9, row = 2, col = 0

用两个嵌套的for循环遍历整个数组,并记录最大值和其所在的行列下标。

#include <stdio.h>

void InputArray(int *p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);

int main() {
    int m, n;
    printf("Input m, n:");
    scanf("%d,%d", &m, &n);

    int a[m][n];
    InputArray(&a[0][0], m, n);

    int row, col, max;
    max = FindMax(&a[0][0], m, n, &row, &col);

    printf("max = %d, row = %d, col = %d\n", max, row, col);
    return 0;
}

void InputArray(int *p, int m, int n) {
    printf("Input %d*%d array:\n", m, n);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", p + i * n + j);
        }
    }
}

int FindMax(int *p, int m, int n, int *pRow, int *pCol) {
    int max = *p;
    *pRow = 0;
    *pCol = 0;

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (*(p + i * n + j) > max) {
                max = *(p + i * n + j);
                *pRow = i;
                *pCol = j;
            }
        }
    }
    return max;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:
    int getMaxIndex(int m, int n, int a[m][n], int *max_value, int *max_row, int *max_col){
        int i, j, max_i, max_j;
        *max_value = a[0][0];
        max_i = max_j = 0;
        for(i=0; i<m; i++){
            for(j=0; j<n; j++){
                if(a[i][j] > *max_value){
                    *max_value = a[i][j];
                    max_i = i;
                    max_j = j;
                }
            }
        }
        *max_row = max_i;
        *max_col = max_j;
        return 0;
    }
    

    解释:

    这是一个函数 getMaxIndex,输入为行数 m,列数 n 和二维数组 a,输出为数组中最大值及其所在的行列下标。

    首先,在函数中声明变量 ijmax_imax_j 作为最大元素的行列下标。 变量 *max_value*max_row*max_col 分别是输出的最大值及其所在的行列下标。

    在初始化 *max_value 为数组的首个元素,同时将 max_imax_j 初始化为 0。

    然后,使用双重循环来遍历整个数组。 如果当前元素大于当前最大值 *max_value,则把当前元素赋值给 *max_value,将当前行列下标分别保存到 max_imax_j 中。

    最后,将 max_imax_j 的值保存到 *max_row*max_col 中,函数运行完毕。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^