C++ 实现去掉最高分和最低分计算平均分及输出有效分数的代码分析与优化
### 🔍代码功能分析 这段 C++ 代码的主要功能是计算并输出去掉一个最高分和一个最低分后的平均分,同时输出从低到高排列的有效分数(去掉最高分和最低分后的分数)。以下是代码的详细解释: 1. **头文件包含**: ```cpp #include <iostream> #include <iomanip> #include <algorithm> #include <vector> ``` - `iostream`:用于输入输出操作。 - `iomanip`:用于设置输出格式,如保留小数位数。 - `algorithm`:提供了排序等算法,这里使用 `std::sort` 进行排序。 - `vector`:用于存储评委的分数。 2. **主函数 `main`**: ```cpp int main() { int n; std::cin >> n; // 输入评委数量 ``` - 定义一个整数 `n` 用于存储评委的数量,通过 `std::cin` 从标准输入读取该值。 3. **分数输入**: ```cpp std::vector<double> scores(n); for (int i = 0; i < n; ++i) { std::cin >> scores[i]; // 输入每个评委的分数 } ``` - 创建一个 `std::vector<double>` 类型的 `scores` 向量,大小为 `n`,用于存储每个评委的分数。 - 通过 `for` 循环,使用 `std::cin` 依次读取每个评委的分数并存储到 `scores` 向量中。 4. **分数排序**: ```cpp std::sort(scores.begin(), scores.end()); ``` - 使用 `std::sort` 函数对 `scores` 向量中的元素进行升序排序。 5. **计算去掉最高分和最低分后的总分**: ```cpp double sum = 0; for (int i = 1; i < n - 1; ++i) { sum += scores[i]; // 计算去掉最高分和最低分后的总分 } ``` - 定义一个双精度浮点数 `sum` 用于存储去掉最高分和最低分后的总分。 - 通过 `for` 循环,从第二个元素(索引为 1)到倒数第二个元素(索引为 `n - 2`)进行累加。 6. **计算平均分**: ```cpp double average = sum / (n - 2); // 计算平均分 ``` - 将总分 `sum` 除以有效分数的数量(`n - 2`),得到平均分。 7. **输出平均分**: ```cpp std::cout << std::fixed << std::setprecision(1) << average << std::endl; ``` - 使用 `std::fixed` 和 `std::setprecision(1)` 设置输出格式,保留一位小数,然后输出平均分。 8. **输出有效分数**: ```cpp for (int i = 1; i < n - 1; ++i) { if (i > 1) { std::cout << " "; } std::cout << scores[i]; } std::cout << std::endl; ``` - 通过 `for` 循环,从第二个元素(索引为 1)到倒数第二个元素(索引为 `n - 2`),依次输出有效分数,分数之间用空格分隔。 ### 🌟优化建议 可以添加输入验证,确保输入的评委数量 `n` 大于 2,因为如果 `n` 小于等于 2,去掉最高分和最低分后就没有有效分数了。以下是优化后的代码: ```cpp #include <iostream> #include <iomanip> #include <algorithm> #include <vector> int main() { int n; std::cout << "请输入评委数量: "; std::cin >> n; // 输入验证 if (n <= 2) { std::cout << "评委数量必须大于 2。" << std::endl; return 1; } std::vector<double> scores(n); std::cout << "请输入每个评委的分数: "; for (int i = 0; i < n; ++i) { std::cin >> scores[i]; } std::sort(scores.begin(), scores.end()); double sum = 0; for (int i = 1; i < n - 1; ++i) { sum += scores[i]; } double average = sum / (n - 2); std::cout << "去掉最高分和最低分后的平均分: " << std::fixed << std::setprecision(1) << average << std::endl; std::cout << "从低到高的有效分数: "; for (int i = 1; i < n - 1; ++i) { if (i > 1) { std::cout << " "; } std::cout << scores[i]; } std::cout << std::endl; return 0; } ``` ######[AI问答 | 1209点数解答 | 2026-04-18 16:23:38]
- C++ 实现学生成绩统计:最高分、最低分、不及格与优秀人数计算(字节豆包 | 489点数解答 | 2026-04-12 10:09:58)9
- Python实现期末成绩单数据统计:一键算出及格不及格人数及高低分、平均分!(字节豆包 | 478点数解答 | 2025-12-06 20:50:12)74
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- C++实现支持四则运算的简单计算器,处理除数为0和无效操作(字节豆包 | 241点数解答 | 2025-10-29 20:21:29)73
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)333
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)344
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)256
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)51
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)74
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)44
- 查询学生分数:代码实现、逻辑要点与错误处理揭秘(阿里通义 | 227点数解答 | 2024-12-05 19:08:09)251
- C++实现:从键盘输入学生分数并按学号精准查询,附代码与逻辑要点!(阿里通义 | 188点数解答 | 2024-12-05 19:08:45)545