编写函数fun(intn),其功能是可以输入n个学生的成绩,统计出各分数段的人数,返回值为这些人数的平均分。用c++写出
时间: 2024-12-24 15:29:10 浏览: 10
为了编写这个函数`fun`,我们可以先创建一个结构体`Student`来存储每个学生的成绩,然后定义一个数组来保存各个分数段的计数,最后计算平均分并返回。下面是一个简单的C++示例:
```cpp
#include <iostream>
#include <map>
using namespace std;
// 定义学生结构体
struct Student {
int score;
};
// 函数声明
double fun(int n, vector<Student>& scores);
int main() {
int numStudents;
cout << "请输入学生人数: ";
cin >> numStudents;
// 创建一个包含n个元素的vector来存储成绩
vector<Student> studentScores(numStudents);
for (int i = 0; i < numStudents; ++i) {
cout << "请输入第" << (i + 1) << "个学生的成绩: ";
cin >> studentScores[i].score;
}
double averageScore = fun(numStudents, studentScores); // 调用函数
cout << "各分数段人数及其平均分: " << averageScore << endl;
return 0;
}
// 实现fun函数
double fun(int n, vector<Student>& scores) {
map<int, int> freqMap; // 使用map保存频率(成绩计数)
double totalScore = 0; // 计算总分
// 遍历成绩,更新频率映射,并累加总分
for (const auto& score : scores) {
freqMap[score.score]++;
totalScore += score.score;
}
// 计算平均分
double avgFreq = static_cast<double>(n); // 初始化为学生总数,作为频率总和的起点
for (const auto& [score, count] : freqMap) {
avgFreq -= count;
averageScore += score * count / n; // 更新平均分
}
averageScore /= avgFreq; // 最终平均分
return averageScore;
}
```
在这个程序中,`fun`函数接受一个整数`n`和一个`Student`类型的vector,遍历成绩,统计每个分数段的学生数量,并返回所有分数段的平均分。
阅读全文