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

C 語言二維數組統計課程平均分:未初始化累加變量導致隨機結果

     編輯:程式設計疑難解答

經典新手錯誤:定義累加陣列 int sum[3]; 卻忘記初始化為 0,導致累加時加上隨機垃圾值,輸出平均分毫無意義。

錯誤代碼

int sum[3];  // 未初始化,包含隨機值
for (int i = 0; i < 10; i++) {
    sum[0] += scor[i][0];  // 在垃圾值上累加
    sum[1] += scor[i][1];
    sum[2] += scor[i][2];
}

正確代碼

#include <stdio.h>

int scor[10][3];

void input() {
    for (int i = 0; i < 10; i++) {
        printf("chinese maths english\n");
        scanf("%d %d %d", &scor[i][0], &scor[i][1], &scor[i][2]);
    }
}

int main() {
    input();
    int sum[3] = {0, 0, 0};  // 關鍵:顯式初始化為 0
    for (int i = 0; i < 10; i++) {
        sum[0] += scor[i][0];
        sum[1] += scor[i][1];
        sum[2] += scor[i][2];
    }
    printf("avg %d, %d, %d\n", sum[0]/10, sum[1]/10, sum[2]/10);
    return 0;
}

為什麼必須初始化?

  • 區域變量(函數內部定義)不會自動初始化,其初始值是棧上殘留的隨機數據。
  • 全域/靜態變量會自動初始化為 0,但局部變量不會。
  • int sum[3] = {0}; 或 int sum[3] = {0,0,0}; 都能將所有元素置 0。

進階改進建議

  • 使用 float 或 double 存儲平均分,避免整數除法截斷小數部分。
  • 輸入驗證:檢查 scanf 返回值,防止非數字輸入導致死循環。
  • 將科目數、學生數定義為常量,提高可維護性。
#define STUDENTS 10
#define SUBJECTS 3
// ...
float avg[SUBJECTS] = {0};
for (int j = 0; j < SUBJECTS; j++)
    for (int i = 0; i < STUDENTS; i++)
        avg[j] += scor[i][j];
for (int j = 0; j < SUBJECTS; j++)
    avg[j] /= STUDENTS;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved