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

C++ 成績統計系統需求分析:不及格率、平均分、排序、分數段分布

     編輯:程式設計疑難解答

需求規格

輸入:多門課程的學生成績(人數、各科分數)。
輸出:四大統計指標。

功能清單

  1. 不及格統計: 各科 < 60 分人數、不及格率(百分比,保留 2 位小數)。
  2. 平均分: 各科算術平均分(保留 2 位小數)。
  3. 排序輸出: 各科成績由高到低排序輸出(學號+分數)。
  4. 分數段分布: 統計各區間人數比例:
    • < 60 分
    • 60-69 分
    • 70-79 分
    • 80-89 分
    • 90-100 分

資料結構設計

struct Student {
    int id;
    vector<float> scores;  // 每門課分數
};

struct CourseStat {
    string name;
    int fail_count = 0;
    float fail_rate = 0.0f;
    float average = 0.0f;
    vector<pair<int, float>> sorted;  // (id, score) 降序
    array<int, 5> distribution = {0}; // 5 個區間計數
    array<float, 5> dist_rate = {0};
};

演算法流程

  1. 讀入學生數 N、課程數 M。
  2. 動態分配 vector<Student> students(N),讀入每生 M 科分數。
  3. 對每門課 j = 0..M-1:
    • 遍歷所有學生,累加總分、統計不及格、填充分布區間、收集 (id, score) 至向量。
    • 計算平均、不及格率、分布比例。
    • 對收集向量按分數降序排序(std::sort + lambda)。
    • 輸出該課統計報表。

時間複雜度

  • 統計遍歷:O(N×M)
  • 排序:M 次 O(N log N),總 O(M·N log N)。
  • 空間:O(N·M) 存分數 + O(N) 排序暫存。

關鍵細節

  • 輸入驗證: 分數範圍 0-100,非數字輸入重試。
  • 浮點數格式: cout << fixed << setprecision(2)。
  • 邊界條件: 60 分歸屬 60-69 區間;100 分歸屬 90-100 區間。
  • 擴充性: 區間邊界可配置(讀取設定檔),支援新增統計指標(中位數、標準差、四分位數)。

測試案例

Input:
3 2
1001 85 58
1002 92 76
1003 67 45

Output:
=== Course 1 ===
Average: 81.33
Fail Count: 0 (0.00%)
Sorted: 1002:92  1001:85  1003:67
Distribution:
[0-59]: 0 (0.00%)
[60-69]: 1 (33.33%)
[70-79]: 0 (0.00%)
[80-89]: 1 (33.33%)
[90-100]: 1 (33.33%)

=== Course 2 ===
Average: 59.67
Fail Count: 1 (33.33%)
Sorted: 1002:76  1001:58  1003:45
Distribution:
[0-59]: 2 (66.67%)
[60-69]: 0 (0.00%)
[70-79]: 1 (33.33%)
[80-89]: 0 (0.00%)
[90-100]: 0 (0.00%)

結語: 這是典型的「資料處理 + 統計 + 排序」綜合練習。用 C++ STL(vector, sort, iomanip)可在 100 行內完成核心邏輯,重點在於資料結構正確、邊界處理嚴謹、輸出格式精確。

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