函数的C语言问题M和N的二维数组

有一个M*N的二维数组,求其每列上的最小值,并将该值放入一个新的一维数组。要求:设计一个函数,实现该功能。主函数中先将二维数组显示,然后调用函数,最后将结果输出。

#define M 3
#define N 4

void fun(int tt[M][N],int pp[N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
if(tt[j][i]<pp[i])
pp[i]=tt[j][i];
}
}
void main()
{
int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}};
int p[N],i,j,k;
printf("the original data is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%6d",t[i][j]);
printf("\n");
}
fun(t,p);
printf("\nthe result is:\n");
for(k=0;k<N;k++)
printf("%4d",p[k]);
printf("\n");
}


#include <stdio.h>
#include <stdlib.h>

#define M 2
#define N 3

void getMin(int (*a)[N],int *b)
{
    int i,j,min;
    for(i=0;i<M;i++)
    {        
        min=a[i][0];
        for(j=1;j<N;j++)
        {            
            if(a[i][j]<min)
                min=a[i][j];
        }
        b[i]=min;            
    }
}

int main(void)
{
    int i,j;
    int b[M],a[M][N]={{4,3,2},{8,3,7}};
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    getMin(a,b);    
    for(i=0;i<M;i++)
        printf("%d ",b[i]);

    return 0;
}

一个实现,供参考:


#include <stdio.h>
#define M 3
#define N 3

int main(void){
    
    int arr[M][N]={{9,1,5},{4,6,3},{2,7,8}}; //初始化二维数组,可也以用循环获取一个二维数组的输入 
    int i,j;
    //打印二维数组的元素 
    printf("M*N数组的元素为:\n");
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    
    
    int min[N];

    //计算每一列的最小值 
    for(i=0;i<N;i++){
        
        min[i]=arr[0][i]; //把每一列的最小值先赋值为第一行相应列的值 
        for(j=0;j<M;j++){
        //如果当前列的此行最小值比其他行的大,则把这列小的值赋值给最小值数组元素 ,实现求此列最小值的目的 
            if(min[i]>arr[j][i]){  
                    min[i]=arr[j][i];
                }
            
        }
    } 
     
     //打印每一列最小值的结果 
     for(i=0;i<N;i++){
         printf("第%d列的最小值是%d.\n",i+1,min[i]);
     } 
     
    return 0;
} 

img