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

C語言陣列實作:輸入30個數字求最大值、最小值、總和與平均

     編輯:C 語言問答

C 語言陣列練習:統計 30 個數字的基本特徵值

題目要求:輸入 30 個數字存入陣列,輸出最大值、最小值、總和與平均值。

完整程式碼

#include <stdio.h>

int main() {
    int i, n = 30;
    float max, min, sum = 0, num[30];

    printf("請輸入 30 個數字,每輸入一個按 Enter 確認:\n");
    for (i = 0; i < n; i++) {
        scanf("%f", &num[i]);
        sum += num[i];
    }

    max = min = num[0];
    for (i = 1; i < n; i++) {
        if (max < num[i]) max = num[i];
        else if (min > num[i]) min = num[i];
    }

    printf("最大值: %.2f\n", max);
    printf("最小值: %.2f\n", min);
    printf("總和: %.2f\n", sum);
    printf("平均值: %.2f\n", sum / n);

    return 0;
}

關鍵點解析

  1. 陣列宣告:float num[30]; 宣告 30 個浮點數陣列,索引 0~29。
  2. 輸入迴圈:scanf("%f", &num[i]); 必須取址 &,將輸入值存入陣列對應位置,同時累加總和。
  3. 初始化極值:max = min = num[0]; 以第一個元素為基準,避免未初始化比較錯誤。
  4. 單迴圈找極值:從索引 1 開始遍歷,依序比較更新最大/最小值,時間複雜度 O(n)。
  5. 格式化輸出:%.2f 保留兩位小數,提升可讀性。

常見錯誤與改進

錯誤後果修正
scanf("%f", num[i]); 缺少 &程式崩潰 (Segmentation Fault)必須 &num[i] 傳遞記憶體位址
max/min 初始化為 0 或極大值若輸入全負數或全正數會得到錯誤結果初始化為 num[0]
使用 int 儲存浮點輸入截斷小數部分宣告 float 或 double

進階擴充:動態記憶體分配版本

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n = 30;
    float *num = (float*)malloc(n * sizeof(float));
    if (!num) return 1;

    float max, min, sum = 0;
    // ... 輸入與計算邏輯相同 ...
    free(num);
    return 0;
}

動態分配適合「執行期才知道陣列大小」的情境,記得 free() 釋放記憶體。

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