2014-04-10 67 views
-1

這是一個函數原型,用於獲取二維數組,特定行,特定列和數組大小(大小既是行數也是列數)。然後它應該返回行和列的單個最大值。我不太確定發生了什麼,但它行爲不正確,只是返回奇怪的結果。所以我有點失落,我覺得我很接近,但不確定發生了什麼問題。查找二維數組中指定行和列的最大值C

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

它看起來不像以前做過的任何編程。我會建議上課。 –

+1

我真的不需要你光顧我,我正在上課,如果你不打算提供任何有用的東西,請將你的評論留給自己。 – user3427697

+0

您返回'maxfin';因此您應該在返回maxfin之前將'maxc'和'maxr'中的較大值賦給'maxfin'。 –

回答

0

只需卸下return maxcreturn maxr並刪除

if (maxc > maxr) 
{ 
    maxc = maxfin; 
} 
+0

這就是我原來的樣子,但是當我刪除它時,它總是返回0. – user3427697

+0

已更新的答案。 – user3018144

+0

工作正常!謝謝! – user3427697

0

您的問題聲明和你的函數原型不匹配:

這是一個函數原型拿在2D數組,特定行,特定列和數組大小(大小既是行數也是列數)。

int search_max(int a[][MAX], int r, int c, int size) 

原型說陣列是不確定長度的但每一行不是大小size的大小MAX的。在C99或更高版本,你可以寫你指定使用VLA什麼 - 變長數組:

int search_max(int size, int a[size][size], int row, int col) 

你可以讓你的代碼的工作,只要通過陣列確實有MAX的寬度,只要size不大於MAX,並且只要行和列都小於size

要搜索列,不需要嵌套循環;一個就足夠了。同樣,要跨行搜索,您不需要嵌套循環。當您爲maxcmaxr設置初始值時,您需要從要分析的行或列中進行設置。

把所有的一起導致:

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; 
} 

在給定的斷言,你的函數簽名來代替礦的使用。

也可能沒有單獨的maxrmaxc變量;簡單地使用:

int max = a[r][c]; // Or a[r][0] or a[0][c] 

,然後用(而不是1)的範圍0運行兩個循環到size,比較和設定並返回max。保持環路對稱。 (如果陣列很大,額外比較的代價是微不足道的;如果陣列很小,額外比較的代價是微不足道的。)

相關問題