在C語言程式設計中,二維陣列的行列操作是基礎且重要的技能。本文透過兩個經典範例,詳細解析如何從二維陣列中提取各行最大值,以及如何對字串陣列進行字母順序排序。
給定一個 3×4 的二維整數陣列 a,目標是找出每一行的最大元素,存入一維陣列 b 中。
int a[3][4] = {
{3, 16, 87, 65},
{4, 32, 11, 108},
{10, 25, 12, 37}
};
// 預期結果 b = {87, 108, 37}
採用雙重迴圈結構:外層迴圈遍歷每一行,內層迴圈遍歷該行的所有列。
i (0~2)a[i][0] 暫存為目前最大值 max_valj=1~3),若 a[i][j] > max_val 則更新 max_valmax_val 即為該行最大值,存入 b[i]#include <stdio.h>
int main() {
static int a[3][4] = {
{3, 16, 87, 65},
{4, 32, 11, 108},
{10, 25, 12, 37}
};
int b[3], i, j, max_val;
// 提取各行最大值
for (i = 0; i <= 2; i++) {
max_val = a[i][0];
for (j = 1; j <= 3; j++) {
if (a[i][j] > max_val) max_val = a[i][j];
}
b[i] = max_val;
}
// 輸出原始陣列 a
printf("array a:\n");
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 3; j++) {
printf("%5d", a[i][j]);
}
printf("\n");
}
// 輸出結果陣列 b
printf("\narray b:\n");
for (i = 0; i <= 2; i++) {
printf("%5d", b[i]);
}
printf("\n");
return 0;
}
此範例展示如何使用二維字元陣列儲存多組字串,並透過選擇排序法進行字母順序排列。
char cs[5][20] 可視為 5 個獨立的字串 cs[0] ~ cs[4]strcmp() 依 ASCII 碼比較兩字串大小strcpy() 用於交換字串內容gets() 可讀取含空格的完整行字串i 從 0 到 4,代表當前要確定的排序位置cs[i] 複製到暫存陣列 st,記錄索引 p = ij 從 i+1 到 4,尋找剩餘字串中最小者strcmp(cs[j], st) < 0,更新 st 為 cs[j],p = jp != i,交換 cs[i] 與 cs[p]cs[i]#include <stdio.h>
#include <string.h>
void main() {
char st[20], cs[5][20];
int i, j, p;
printf("input country's name:\n");
for (i = 0; i < 5; i++) {
gets(cs[i]);
}
printf("\n");
for (i = 0; i < 5; i++) {
p = i;
strcpy(st, cs[i]);
for (j = i + 1; j < 5; j++) {
if (strcmp(cs[j], st) < 0) {
p = j;
strcpy(st, cs[j]);
}
}
if (p != i) {
strcpy(st, cs[i]);
strcpy(cs[i], cs[p]);
strcpy(cs[p], st);
}
puts(cs[i]);
}
printf("\n");
}