这是一个函数原型,用于获取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;
}
答案 0 :(得分:0)
只需移除return maxc
和return maxr
,然后移除
if (maxc > maxr)
{
maxc = maxfin;
}
答案 1 :(得分:0)
您的问题陈述和您的函数原型不匹配:
这是一个函数原型,用于获取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
。保持循环对称。 (如果阵列很大,额外比较的成本是微不足道的;如果阵列很小,额外比较的成本是微不足道的。)