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

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

本题要求实现:找出任意的一个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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改