實驗任務(wù)2:
運行測試截圖:

問題1:
成績存儲位置:成績存儲在`GradeCalc`類的一個`vector<int>`成員變量中。由于`GradeCalc`是從`std::vector<int>`派生的,因此它可以使用`std::vector<int>`的所有成員函數(shù)來管理成績數(shù)據(jù)。
訪問成績的方法:
- `sort`, `min`, `max`, `average`, `output`等方法通過繼承自`std::vector<int>`的迭代器或成員函數(shù)(如`begin()`, `end()`)來訪問成績。
- `input`方法則是通過`push_back`函數(shù)將讀取的成績添加到`vector<int>`中,即向派生類自身添加元素。
問題2:
分母功能:`n`代表了成績的數(shù)量,`1.0 / n`是為了計算平均分時對總分進行正確的除法操作,確保得到的是浮點數(shù)結(jié)果而非整數(shù)結(jié)果。
去掉`1.0`的影響:如果去掉了`* 1.0`,那么在C++中整數(shù)除以整數(shù)的結(jié)果仍然是整數(shù),即使結(jié)果中有小數(shù)部分也會被截斷。這意味著如果成績總和不是`n`的整數(shù)倍,計算出的平均分會丟失小數(shù)部分,導(dǎo)致結(jié)果不準確。乘以`1.0`可以確保至少其中一個操作數(shù)是浮點數(shù),從而讓整個表達式的結(jié)果也是浮點數(shù),保證了計算的準確性。
問題3:
從實際應(yīng)用的角度來看,`GradeCalc`類可能需要考慮以下幾個方面進行迭代和完善:
異常處理:目前的實現(xiàn)沒有處理任何異常情況,例如用戶輸入非法成績(如負數(shù)或超過100的分數(shù))。可以通過增加輸入驗證邏輯來增強程序的健壯性。
用戶友好性:可以增加提示信息,使用戶更清楚地了解如何使用程序,例如在輸入成績前提示用戶輸入合法的成績范圍。
數(shù)據(jù)持久化:目前的成績數(shù)據(jù)只存在于程序運行期間,一旦程序結(jié)束,所有數(shù)據(jù)都會丟失。可以考慮增加文件讀寫功能,讓用戶能夠保存和加載成績數(shù)據(jù)。
多語言支持:如果這個程序計劃用于國際化的環(huán)境中,可以考慮加入多語言支持,使不同國家的用戶都能方便地使用該程序。
安全性:對于敏感數(shù)據(jù)(如學生姓名、成績等),應(yīng)該考慮數(shù)據(jù)加密和安全傳輸機制,防止數(shù)據(jù)泄露。
擴展性:考慮到未來可能會有更多功能需求(如成績曲線分析、成績預(yù)測等),可以在設(shè)計時留出足夠的擴展空間,比如使用插件機制或者策略模式。
性能優(yōu)化:雖然對于小規(guī)模數(shù)據(jù)集來說當前實現(xiàn)已經(jīng)足夠高效,但如果面對大規(guī)模數(shù)據(jù)集,可以考慮優(yōu)化算法,減少不必要的計算和內(nèi)存消耗。例如,在調(diào)用`info`方法時,`sort`和`compute`方法可以合并執(zhí)行,避免重復(fù)遍歷成績列表。
實驗任務(wù)3:
運行測試截圖:

問題1:
成績儲存在GradeCalc類中的一個vector類型的私有成員變量grades中;
通過直接訪問grades對象來訪問每個成績;
實驗2是通過繼承的vector 接口來隱性訪問各個成績,而實驗3則通過顯性訪問GradeCalc類中的一個vector類型的私有成員變量grades來訪問各個成績;
問題2:
在面向?qū)ο缶幊痰倪^程中,類的射擊方式多種多樣,既可以通過繼承來實現(xiàn)代碼復(fù)用,也可以載類中添加另一個類的對象來實現(xiàn)。
實驗任務(wù)4:
1.正確錄入:

2.去除line35

作用是忽略輸入流中的下一個字符,直到遇到換行符 \n 或者達到最大限制 numeric_limits<streamsize>::max()。它通常用于清除輸入緩沖區(qū),以確保后續(xù)使用 getline() 函數(shù)時不會因為前一次輸入操作留下的換行符而出現(xiàn)問題。

運行測試截圖:
1.正確錄入:

2.去掉line16后:

問題2:作用是忽略輸入流中的剩余部分直到遇到換行符,并丟棄這些字符。它通常用于清除輸入緩沖區(qū),以確保后續(xù)使用 getline 函數(shù)讀取輸入時不會受到先前輸入的影響。
實驗任務(wù)5:
運行測試截圖:

實驗任務(wù)6:


實驗任務(wù)7:

GradeCalc.hpp