编写函数对一个3*4的二维数组中最大值和最小值互换位置,主函数调用并输出变换前后的数组

编写函数对一个3*4的二维数组中最大值和最小
值互换位置,主函数调用并输出变换前后的数组

一个实现:


#include <stdio.h>

void changeMaxAndMin(int( * arr)[4],int n){
    
    int max,min;
    int maxposition;
    int minposition;
    
    int * p=&arr[0][0];  //记录数组起始位置 
    max=min=arr[0][0];
    int i,j;
    
    for(i=0;i<n;i++){
        for(j=0;j<4;j++){
            if(max<arr[i][j]){  //寻找最大值,并记录最大值的位置 
                max=arr[i][j];
                maxposition=i*4+j;
                //printf("max=%d,maxposition=%d,i=%d,j=%d\n",max,maxposition,i,j);
            }
            
            if(min>arr[i][j]){  //寻找最小值,并记录最小值位置 
                minposition=i*4+j;
                //printf("min=%d,minposition=%d,i=%d,j=%d\n",min,minposition,i,j);
            }
        }
    }
    
//    printf("max=%d,maxposition=%d,i=%d,j=%d\n",max,maxposition,i,j);
    //printf("min=%d,minposition=%d,i=%d,j=%d\n",min,minposition,i,j);
    i=p[maxposition] ;  //用一维指针访问二维数组,并交换最大值和最小值 
    p[maxposition]  = p[minposition];
    p[minposition]=i;
}

int main(void){
    
    int arr[3][4]={{3,5,2,1},{6,7,33,56},{9,8,7,10}};
    printf("数组交换前:\n");
    int i,j;
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    
    changeMaxAndMin(arr,3); 
    printf("数组交换后:\n");
    
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
} 

img