本題為全國計算機等級考試二級C語言高頻真題(2010.9、2011.3、2012.3年份多次出現),考察二維數組遍歷、最大值查找算法、函數參數傳遞(數組退化為指針)等基礎核心考點。屬於「函數填空」類型,難度適中,是必拿分項。
編寫函數 fun,找出 2×M 整型二維數組中最大元素的值並返回。主函數已給定,不得修改。
#define M 4
#include <stdio.h>
int fun(int a[][M]) {
int i, j, max = a[0][0];
for (i = 0; i < 2; i++)
for (j = 0; j < M; j++)
if (max < a[i][j])
max = a[i][j];
return max;
}
void main() {
int arr[2][M] = {5, 8, 3, 45, 76, -4, 12, 82};
printf("max=%d\n", fun(arr));
}
max=82

int fun(int a[][M])
a[i][j] 地址max = a[0][0]
i < 2:遍歷2行(題目固定2行)j < M:遍歷M列(宏定義4列)if (max < a[i][j]) max = a[i][j];
return max;數組在內存中按行主序連續存儲: arr[0][0] arr[0][1] arr[0][2] arr[0][3] | arr[1][0] arr[1][1] arr[1][2] arr[1][3] 5 8 3 45 | 76 -4 12 82 地址遞增 → a[i][j] 地址計算:base + (i * M + j) * sizeof(int)
| 考點 | 關鍵知識 | 易錯點 |
|---|---|---|
| 二維數組參數 | 第二維必須固定,第一維可空 | 寫成 int a[][] 或 int** a 均錯 |
| 宏常量使用 | #define M 4 作為列數常量 | 在函數中重新定義 M 或用變量 |
| 最大值初始化 | 用首元素 a[0][0] | 用 0 或 INT_MIN 可能掩蓋邏輯 |
| 循環邊界 | i<2, j | 寫成 i<=2 或 j<=M 越界 |
int* arr[2] 指針數組,每行長度不同,遍歷需額外長度數組int a[][M][N]double,比較邏輯不變本題是二級C語言考試中「二維數組遍歷+極值查找」的標準範例。核心掌握點:
熟練掌握此模式,同類考題(求和、平均值、統計正負數個數等)皆可舉一反三,穩拿基礎分。