m0_74079850 2022-11-27 10:48 采纳率: 96.3%
浏览 45
已结题

指向二维数组的指针(指针与二维数组)

本题要求实现:找出任意的一个m×n矩阵每一行上的最大值并按样例格式要求显示。其中:m、n满足(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入。
函数接口定义:
void max_row(int (*arr)[20], int m, int n);
max_row函数输出矩阵各行的最大值,其中m,n为欲处理矩阵的行、列值,
裁判测试程序样例:

/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:

5 6
31 42 36 74 235 88
144 32 57 37 43 47
97 51 257 7 445 459
33 65 44 3 425 43
68 342 82 789 123 213
输出样例:
The max in line 1 is:235
The max in line 2 is:144
The max in line 3 is:459
The max in line 4 is:425
The max in line 5 is:789
请问下面这段代码是哪里错了啊 还有就是为什么max一开始赋值-1啊?
谢谢

img

  • 写回答

2条回答 默认 最新

  • 关注

    max=-1是为了有一个起始比较的数,也可以用其它更小的负数,但是你这个题目里没有说明矩阵中的都是正数,所以这里用max=-1可能会导致错误,如果矩阵中都是负数,结果很可能就是错误的!!
    max = -1 改成 max = arr[i][0];

    运行结果:

    img

    完整代码:

    #include <stdio.h>
    
    void max_row(int(*arr)[20], int m, int n)
    {
        int i, j, max;
        for (i = 0; i < m; i++)
        {
            max = arr[i][0];
            for (j = 0; j < n; j++)
            {
                if (arr[i][j] > max) max = arr[i][j];
            }
            printf("The max in line %d is:%d\n", i + 1, max);
        }
    }
    
    int main()
    {
        int arr[20][20], i, j, m, n;
        scanf("%d %d", &m, &n);
        for (i = 0; i < m; i++)
        {
            for (j = 0; j < n; j++)
                scanf("%d", &arr[i][j]);
        }
        max_row(arr, m, n);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 创建了问题 11月27日