#i我想找到每一行的最大值,我已经在size [5] [2]的主目录中创建了一个数组,我想找到每一列的最大值#
void
maximum(int a[5][2])
{
int max = a[0][0];
int i, j;
for (i = 0; i < 2; i++) {
int max = a[0][i];
for (j = 0; j < 5; j++)
if (a[j][i] > max)
max = a[j][i];
}
printf("Maximum of 1st column= %d \n", max);
for (i = 0; i < 2; i++) {
int max = a[1][i];
for (j = 0; j < 5; j++)
if (a[j][i] > max)
max = a[j][i];
}
printf("Maximum of 2st column= %d \n", max);
max = a[0][0];
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
if (a[i][j] > max)
max = a[i][j];
}
}
printf("Maximum of all %d \n", max);
}
答案 0 :(得分:4)
您正在做相反的事情。 [0][i]
是第一行,而不是第一列。您必须像[i][0]
和[i][1]
那样做,对于j也必须如此。是max=a[i][j]
。
就像您说的那样,仅检查第一行和第二行的最大值,而其余三行未选中。希望对您有所帮助。
答案 1 :(得分:0)
您需要仔细选择索引和顺序。
#include <stdio.h>
#include <stdlib.h>
void show_max(int rows, int cols, int mat[rows][cols])
{ // ^^^^ ^^^^ ^^^^^^^^^^^^^^^ VLA notation
// Traverse the array row-major order
for (int r = 0; r < rows; ++r)
{
int max = mat[r][0];
// ^^^^ First element of row r
for (int c = 1; c < cols; ++c)
{
if (mat[r][c] > max)
max = mat[r][c];
// ^^^^
}
printf("Max of ROW %d: %d\n", r, max);
}
int max_global = mat[0][0];
// Traverse the array in colmun-major order
for (int c = 0; c < cols; ++c) // <--
{
int max = mat[0][c];
// ^^^^ // First element of column c
for (int r = 1; r < rows; ++r) // <--
{
if (mat[r][c] > max)
max = mat[r][c];
// ^^^^
}
printf("Max of COLUMN %d: %d\n", c, max);
// This could be in the first nested loop.
if (max > max_global)
max_global = max;
}
printf("Max ELEMENT: %d\n", max_global);
}
int main(void)
{
int mat[5][2] = {{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
show_max(5, 2, mat);
}