C程序设计(第四版) 谭浩强 例6.5
例 6.5 有一个 3 × 4 3 \times 4 3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:
#include <stdio.h>
#include <stdlib.h>
int main() {
int arr[3][4];
int row, column;
int max = 0;
printf("Input 3*4 array:\n");
for(int i = 0; i < 3; i++){
for(int j = 0; j < 4; j++){
printf("Enter No.%d row No.%d column number: ", i + 1, j + 1);
scanf("%d", &arr[i][j]);
}
}
for(int i = 0; i < 3; i++){
for(int j = 0; j < 4; j++){
if(arr[i][j] > max){
max = arr[i][j];
row= i + 1;
column = j + 1;
}
}
}
printf("Max = %d, Row = %d, Column = %d\n", max, row, column);
system("pause");
return 0;
}
方法2:使用指针、函数的模块化设计
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 4
void initialArray(int ***arr, int m, int n){
*arr = (int**)malloc(m * sizeof(int));
for(int i = 0; i < m; i++){
(*arr)[i] = (int*)malloc(n * sizeof(int));
}
}
void input(int **arr, int m, int n){
printf("Input %d * %d Array:\n", m, n);
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
printf("Enter Row %d Column %d number: ", i + 1, j + 1);
scanf("%d", &arr[i][j]);
}
}
}
void output(int **arr, int m, int n){
printf("Output Array: \n");
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
printf("%5d ", arr[i][j]);
}
printf("\n");
}
}
void outputMax(int **arr, int m, int n){
int row, column;
int max = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(arr[i][j] > max){
max = arr[i][j];
row = i + 1;
column = j + 1;
}
}
}
printf("Max = %d, Row = %d, Column = %d\n", max, row, column);
}
void freeArray(int ***arr, int m, int n){
for(int i = 0; i < m; i++){
free((*arr)[i]);
}
free(*arr);
}
int main() {
int **arr = NULL;
initialArray(&arr, M, N);
input(arr, M, N);
output(arr, M, N);
outputMax(arr, M, N);
freeArray(&arr, M, N);
system("pause");
return 0;
}