開發一個基於 C 語言的控制台程式,依據遺傳學統計公式預測子女成年身高,考量性別、父母身高、運動習慣、飲食習慣四大因素。
| 變數 | 型別 | 說明 | 輸入範例 |
|---|---|---|---|
gender | char | 性別:'M' 男性,'F' 女性 | M |
faHeight | float | 父親身高 (cm) | 175.5 |
moHeight | float | 母親身高 (cm) | 162.0 |
sport | char | 喜愛運動:'Y' 是,'N' 否 | Y |
diet | char | 良好飲食:'Y' 是,'N' 否 | N |
// 基礎遺傳身高
if (gender == 'M')
base = (faHeight + moHeight) * 0.54f;
else
base = (faHeight * 0.923f + moHeight) / 2.0f;
// 修正因子
float factor = 1.0f;
if (sport == 'Y') factor += 0.02f; // +2%
if (diet == 'Y') factor += 0.015f; // +1.5%
// 最終預測
predicted = base * factor;
height_predictor/
├── CMakeLists.txt
├── src/
│ ├── main.c // 入口、選單、輸入驗證
│ ├── predict.h // 預測函數宣告
│ ├── predict.c // 公式實作、單元測試
│ ├── io.h // 輸入輸出工具(安全讀取、清空緩衝區)
│ └── io.c
└── test/
└── test_predict.c // 邊界值測試(男/女、極端身高、Y/N 組合)
fgets 讀整行,再用 sscanf 解析,避免 scanf 留下換行符導致後續讀字元失敗。M/F(大小寫不敏感),習慣只接受 Y/N。printf("%.1f cm\n", predicted)),內部用 float 足夠,若需高精度可用 double。float predict_height(char gender, float fa, float mo, char sport, char diet),便於單元測試與複用。config.txt)存放公式係數(0.54, 0.923, 0.02, 0.015),未來調整無需重編譯。=== 身高預測系統 ===
請輸入性別 (M/F): M
請輸入父親身高: 178
請輸入母親身高: 165
是否喜愛運動 (Y/N): Y
是否有良好飲食習慣 (Y/N): N
--- 預測結果 ---
基礎遺傳身高: 185.2 cm
運動修正: +2.0%
飲食修正: +0.0%
最終預測身高: 188.9 cm
===================
records.csv),支援歷史查詢、匯出。Unity 或 CMock,覆蓋率 > 90%。install 目標生成安裝包。總結: 這是一個經典的「輸入→計算→輸出」小型專案,重點在於輸入健壯性、公式正確性、模組化設計、測試覆蓋。按上述架構實作,代碼量約 200-300 行,結構清晰,完全滿足畢業設計要求。