版权声明:本文为King_HAW原创文章,未经King_HAW允许不得转载。 https://blog.csdn.net/King_HAW/article/details/71374087
题目:编写函数void exchange(int a[M][N]),将MxN维的矩阵中最大元素和最小元素所在的列进行互换,如果最大元素与最小元素在同一列,则不要求互换。
要求:在主函数中初始化原始矩阵并输出原始矩阵,输出最大元素和最小元素的值以及各自所在的行号和列号,输出处理之后的矩阵。
解决:这题难度适中,输出最大最小元素和使用for循环比较,行号列号可以在循环时记录。列互换可以定义一个Temp[M][1]数组。唯一需要注意的一点是:exchange函数申明为void exchange(int a[M][N]),在main函数中调用exchange时,只需写为exchange(a)即可,写成exchange(a[M][N])会报错,这一点要切记!!!
参考网址:
http://bbs.csdn.net/topics/390428483
代码:
#define M 3
#define N 3
#include <stdio.h>
void exchange(int a[M][N]){
int max = a[0][0];
int min = a[0][0];
int i, j;
int b[M][1];
int max_c, max_r, min_c, min_r;
for(i = 0; i < M; i++){
for(j = 0; j < N; j++){
if(a[i][j] > max){
max = a[i][j]; max_r = i; max_c = j;
}
if(a[i][j] < min){
min = a[i][j]; min_r = i; min_c = j;
}
}
}
printf("max = %d, min = %d\n", max, min);
printf("max_r = %d, max_c = %d\n", max_r + 1, max_c + 1);
printf("min_r = %d, min_c = %d\n", min_r + 1, min_c + 1);
if(max_c == min_c){
printf("no change!!\n");
}
else{
for(i = 0; i < M; i++){
b[i][1] = a[i][max_c];
}
for(i = 0; i < M; i++){
a[i][max_c] = a[i][min_c];
}
for(i = 0; i < M; i++){
a[i][min_c] = b[i][1];
}
printf("the change matrix is:\n");
for(i = 0; i < M; i++){
for(j = 0; j < N; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
}
}
int main(){
int a[M][N], i, j;
printf("please input the matrix:\n");
for(i = 0; i < M; i++){
for(j = 0; j < N; j++){
scanf("%d", &a[i][j]);
}
}
printf("the matrix is:\n");
for(i = 0; i < M; i++){
for(j = 0; j < N; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
exchange(a);
return 0;
}
运行结果: