c语言程序输出输入问题

从键盘上输入M*N的二维数组,求每一行最大值,并输出。如:int a[3][4]={1,2,3,4,5,6,8,9,12,10,11,9}的每行最大值。
输入
只有一组测试数据。输入有多行
第一行是m和n, 表示二维数组的行列维数。(m,n不大于100)
第二行 到 第m 行 表示输入的二维数组
输出
输出有m行,每行只有一个数,表示该行的最大值。如样例所示
难度
中等
输入示例
3 4
1 2 3 4
5 6 8 9
12 10 11 9
输出示例
1:4
2:9
3:12

#include <stdio.h>
int main()
{
    int a[100][100],i,j;
    int m,n,max;
    scanf("%d%d",&m,&n);
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<m;i++)
    {
        max = 0;
        for(j=0;j<n;j++)
        {
            if(j==0 || max < a[i][j])
                max = a[i][j];
        }
        printf("%d:%d\n",i+1,max);
    }
}


#include <stdio.h>
#include <limits.h>

int main()
{
    int m, n, i, j, t, max[100] = {0};

    scanf("%d%d", &m, &n);
    for (i = 0; i < m; i++)
    {
        max[i] = INT_MIN;
        for (j = 0; j < n; j++)
        {
            scanf("%d", &t);
            if (t > max[i])
                max[i] = t;
        }
    }
    for (i = 0; i < m; i++)
    {
        printf("%d:%d\n", i + 1, max[i]);
    }

    return 0;
}

供参考:

#include <stdio.h>
#define M  3
#define N  4
int main()
{
    int a[M][N] = { 1,2,3,4,5,6,8,9,12,10,11,9 }, m = M, n = N, b[M] = { 0 }, i, j;
    //scanf("%d%d", &m, &n);
    //for (i = 0; i < m; i++)
    //    for (j = 0; j < n; j++)
    //        scanf("%d", &a[i][j]);
    for (i = 0; i < m; i++)
    {
        for (j = 0, b[i] = a[i][j]; j < n; j++)
        {
            if (b[i] < a[i][j])
                b[i] = a[i][j];
        }
    }
    for (i = 0; i < m; i++)
        printf("%d:%d\n", i + 1, b[i]);
    return 0;
}