编写函数对一个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");
}
}