题目
编写程序,打印出一个三行四列数组的最大值和它在第几行、第几列。
代码
#include<stdio.h>
int main(){
int a[3][4] = {{1,3,2,9},{5,2,10,6},{7,4,2,1}};
int max = a[0][0];
int i,j,m,n;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
//在使用j+1的时候一定要注意越界问题
if(max < a[i][j+1]){
max = a[i][j+1];
m = i;
n = j+1;
}
}
}
printf("最大值为%d,这个值的行是%d,列是%d",max,m+1,n+1);
return 0;
}
输出结果:
最大值为10,这个值的行是2,列是3
问题及解决方案
1、没有关注到数组越界问题,其实一旦i,j的值后续被加减都要关注是否越界
2、实现方式除了把最大值整个赋值给max,其实还可以只赋值下标,利用下标来获取值:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[2][3] = {{2, 5, 8}, {21, 56, 9}};
int i, j, row, column;
row = column = 0;
//重点部分,利用下标获取值,而非整个取值为max
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
if (a[row][column] < a[i][j]) {
row = i;
column = j;
}
}
}
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
printf("%5d ", a[i][j]);
putchar('\n');
}
printf("max=%d %d %d\n", a[row][column], row, column);
return 0;
}