有一个整型二维数组,大小为3x4,找出最大值所在的行和列,以及该最大值。此程序要求用max()函数寻找最大值,并在max()函数中使用指针解决,数组元素的值在主函数中进行输入/输出。部分程序如下,请补齐输入/输出部分,并上机调试。
时间: 2024-05-10 22:14:33 浏览: 46
求二位数组的“数组”。二维数组的“最大点”定义为:某个数式所在行的最大值,并且是所在列的最大值。某行或某列上可能有多个“最大点”
好的,下面是补全后的程序:
```c
#include <stdio.h>
void max(int (*p)[4], int *row, int *col, int *max_value);
int main() {
int a[3][4];
int i, j, row, col, max_value;
printf("请输入12个整数:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
scanf("%d", &a[i][j]);
}
}
max(a, &row, &col, &max_value);
printf("最大值为%d,位于第%d行第%d列。\n", max_value, row + 1, col + 1);
return 0;
}
void max(int (*p)[4], int *row, int *col, int *max_value) {
int i, j;
*max_value = **p;
*row = *col = 0;
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
if (*(*(p + i) + j) > *max_value) {
*max_value = *(*(p + i) + j);
*row = i;
*col = j;
}
}
}
}
```
输入格式为:
```
1 2 3 4
5 6 7 8
9 10 11 12
```
输出格式为:
```
请输入12个整数:
最大值为12,位于第3行第4列。
```
请注意,本程序中的 `max()` 函数使用了指针解决,同时也使用了指针的指针。在调用时,传入的是 `a` 数组的地址,即 `&a`,因为数组名本身就是数组首元素的地址。而在函数中,对于二维数组 `p`,我们使用了 `*p` 来表示第一行的地址,同时也使用了 `*(p + i)` 来表示第 `i + 1` 行的地址。在取元素值时,我们使用了 `*(*(p + i) + j)` 的形式,即先通过 `*(p + i)` 取得第 `i + 1` 行的地址,再加上 `j` 来取得第 `i + 1` 行第 `j + 1` 列的元素值。
阅读全文