这是一个函数原型,用于接收2D数组、特定行、特定列和数组的大小(大小既是行数也是列数)。然后,它应该返回行和列的单个最大值。我不太确定发生了什么,但它的行为不正确,只是返回了奇怪的结果。所以我有点迷路了,我觉得我很接近,但不确定出了什么问题。
int search_max(int a[][MAX], int r, int c, int size)
{
int maxr = a[0][0];
int maxc = a[0][0];
int maxfin = 0;
int x;
int y;
for (x = r; x <= r; x++)
{
for (y = 0; y < size; y++)
{
if (maxr < a[x][y])
{
maxr = a[x][y];
return maxr;
}
}
}
for (y = c; y <= c; y++)
{
for (x = 0; x < size; x++)
{
if (maxc < a[x][y])
{
maxc = a[x][y];
return maxc;
}
}
}
if (maxc > maxr)
{
maxc = maxfin;
}
if (maxr > maxc)
{
maxr = maxfin;
}
else
{
maxr = maxfin;
}
return maxfin;
}
只需移除return maxc
和return maxr
并移除
if (maxc > maxr)
{
maxc = maxfin;
}
您的问题陈述和函数原型不匹配:
这是一个函数原型,用于接收2D数组、特定行、特定列和数组的大小(大小是行和列的数量)。
int search_max(int a[][MAX], int r, int c, int size)
原型表示,数组的长度不确定,但每一行的大小都是MAX
,而不是size
。在C99或更高版本中,您可以使用VLA(可变长度数组)编写您指定的内容:
int search_max(int size, int a[size][size], int row, int col)
只要传递的数组的宽度为MAX
,只要size
不大于MAX
,只要行和列都小于size
,就可以使代码工作。
要向下搜索一列,不需要嵌套循环;一个就足够了。同样,要在一行中进行搜索,不需要嵌套循环。当设置maxc
或maxr
的初始值时,需要从要分析的行或列中进行设置。
把所有这些放在一起会导致:
int search_max(int size, int a[size][size], int row, int col)
{
assert(row >= 0 && row < size);
assert(col >= 0 && col < size);
assert(size <= MAX);
int maxr = a[r][0];
int maxc = a[0][c];
for (int i = 1; i < size; i++)
{
if (a[i][c] > maxc)
maxc = a[i][c];
}
for (int i = 1; i < size; i++)
{
if (a[r][i] > maxr)
maxr = a[r][i];
}
return (maxr > maxc) ? maxr : maxc;
}
对于给定的断言,可以使用您的函数签名来代替我的签名。
也可以不使用单独的maxr
和maxc
变量;简单使用:
int max = a[r][c]; // Or a[r][0] or a[0][c]
然后在0
(而不是1
)到size
的范围内运行两个循环,比较并设置并返回max
。保持循环对称。(如果数组很大,则额外比较的成本无关紧要;如果数组很小,则额外对比的成本无关紧要。)