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

C語言數組經典三題:統計頻率、二維數組操作、列優先輸出

     編輯:C 語言問答

題目一:整數頻率統計 (0-4,-1結束)

需求分析

  • 輸入<20個整數,範圍0~4
  • -1表示輸入結束
  • 統計每個整數出現次數

標準實現

#include 

int main() {
    int count[5] = {0};  // 統計0-4
    int x, total = 0;
    
    printf("輸入0-4之間的整數 (-1結束):\n");
    while (total < 20 && scanf("%d", &x) == 1) {
        if (x == -1) break;
        if (x >= 0 && x <= 4) {
            count[x]++;
            total++;
        } else {
            printf("輸入超出範圍,忽略。\n");
        }
    }
    
    printf("統計結果:\n");
    for (int i = 0; i <= 4; i++) {
        printf("%d: %d次\n", i, count[i]);
    }
    printf("總計: %d\n", total);
    return 0;
}

題目二:30個偶數,每5個求平均存新數組

需求分析

  • 原數組a[30],按順序賦值2,4,6,...,60 (從2開始的偶數)
  • 每5個元素計算一個平均值
  • 共6組,存入avg[6]

實現代碼

#include 

int main() {
    int a[30];
    double avg[6];
    
    // 賦值:2,4,6,...,60
    for (int i = 0; i < 30; i++) {
        a[i] = 2 * (i + 1);
    }
    
    // 每5個求平均
    for (int group = 0; group < 6; group++) {
        int sum = 0;
        for (int i = 0; i < 5; i++) {
            sum += a[group * 5 + i];
        }
        avg[group] = sum / 5.0;  // 強制浮點除法
    }
    
    // 輸出
    printf("原數組:\n");
    for (int i = 0; i < 30; i++) {
        printf("%3d", a[i]);
        if ((i + 1) % 10 == 0) printf("\n");
    }
    
    printf("\n每組平均值:\n");
    for (int i = 0; i < 6; i++) {
        printf("第%d組: %.1f\n", i + 1, avg[i]);
    }
    return 0;
}

題目三:2×3數組列優先輸出

需求分析

  • 數組arr[2][3] (2行3列)
  • 按順序賦值從2開始的偶數:2,4,6,8,10,12
  • 按列優先順序輸出:先輸出第0列所有行,再第1列...

內存佈局理解

行優先存儲 (C語言默認):
arr[0][0]=2  arr[0][1]=4  arr[0][2]=6
arr[1][0]=8  arr[1][1]=10 arr[1][2]=12

列優先輸出順序:
arr[0][0], arr[1][0],  // 第0列
arr[0][1], arr[1][1],  // 第1列
arr[0][2], arr[1][2]   // 第2列
輸出: 2, 8, 4, 10, 6, 12

實現代碼

#include 

int main() {
    int arr[2][3];
    int val = 2;
    
    // 行優先賦值
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            arr[i][j] = val;
            val += 2;
        }
    }
    
    printf("行優先存儲內容:\n");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%4d", arr[i][j]);
        }
        printf("\n");
    }
    
    printf("\n列優先輸出:\n");
    for (int j = 0; j < 3; j++) {      // 外層遍歷列
        for (int i = 0; i < 2; i++) {  // 內層遍歷行
            printf("%4d", arr[i][j]);
        }
    }
    printf("\n");
    return 0;
}

核心知識點總結

  1. 統計計數:利用數組下標對應數值,count[value]++
  2. 分組處理:group * group_size + offset 訪問分組元素
  3. 二維數組存儲:C語言行優先 (Row-major),內存連續
  4. 遍歷順序:外層循環決定主序,內層循環決定次序
  5. 浮點除法:sum / 5.0 或 (double)sum / 5 避免整數截斷

進階擴展

  • 動態分配大數組:malloc + 指針算術
  • 多維數組扁平化:arr[i][j] → flat[i*cols + j]
  • 列優先存儲語言對比:Fortran、MATLAB、R 為列優先
  • 緩存友好訪問:遍歷順序應匹配內存佈局 (行優先存儲→行優先遍歷)
  • 這三道題涵蓋了一維數組統計、分組聚合、二維數組存儲與遍歷三大核心場景。熟練掌握下標計算與循環嵌套順序,是數組操作的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved