首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言二維陣列操作:提取各行最大值與字串排序實戰

     編輯:關於C語言

二維陣列行最大值提取演算法

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

核心演算法邏輯

採用雙重迴圈結構:外層迴圈遍歷每一行,內層迴圈遍歷該行的所有列。

  1. 外層迴圈控制行索引 i (0~2)
  2. 將該行第一個元素 a[i][0] 暫存為目前最大值 max_val
  3. 內層迴圈從第 1 列開始比較 (j=1~3),若 a[i][j] > max_val 則更新 max_val
  4. 內層迴圈結束後,max_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() 可讀取含空格的完整行字串

排序演算法流程(選擇排序法)

  1. 外層迴圈 i 從 0 到 4,代表當前要確定的排序位置
  2. 將 cs[i] 複製到暫存陣列 st,記錄索引 p = i
  3. 內層迴圈 j 從 i+1 到 4,尋找剩餘字串中最小者
  4. 若 strcmp(cs[j], st) < 0,更新 st 為 cs[j],p = j
  5. 內層結束後,若 p != i,交換 cs[i] 與 cs[p]
  6. 輸出已排序確定的 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");
}

本章小結:陣列核心概念回顧

  1. 陣列分類:數值陣列(整數、實數)、字元陣列、指標陣列、結構陣列等
  2. 維度:一維、二維、多維陣列
  3. 宣告三要素:型態指定符、陣列名稱、陣列長度(元素個數)
  4. 賦值方式:
    • 初始化賦值(編譯階段,靜態儲存類別)
    • 輸入函數動態賦值(執行階段,如 scanf、gets)
    • 指派敘述逐元素賦值
  5. 重要限制:數值陣列無法整體指派、輸入、輸出,必須逐元素透過迴圈處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved