某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理: (1)录入每个学生的学号和考试成绩; (2)计算课程的总分和平均分; (3)按成绩由高到低排出名次表; (4)按学号由小到大排出成绩表; (5)按学号查询学生排名及其考试成绩; (6)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比; (7)输出每个学生的学号、考试成绩。
时间: 2023-11-06 14:04:11 浏览: 175
c代码-从键盘输入一个班(全班人数在15~20之间)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)录入每个学生的学号(学号:2016001~2016020)和考试成绩; (2)计算课程的总分和平均分;
好的,我可以为您提供一个基本思路和代码示例。
首先,我们可以定义一个结构体来表示每个学生的学号和考试成绩,然后使用一个一维数组来存储所有学生的信息。接着,我们可以定义一系列函数来实现各种操作,如录入学生信息、计算总分和平均分、排序、查询等。
下面是一个实现上述要求的C++代码示例:
```cpp
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
// 定义学生结构体
struct Student {
string id; // 学号
double score; // 考试成绩
};
// 录入学生信息
void input(Student* students, int n) {
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的学号和考试成绩(用空格隔开):";
cin >> students[i].id >> students[i].score;
}
}
// 计算总分和平均分
void calculateTotalAndAverage(Student* students, int n, double& total, double& average) {
total = 0;
for (int i = 0; i < n; i++) {
total += students[i].score;
}
average = total / n;
}
// 按成绩由高到低排出名次表
void sortByScore(Student* students, int n) {
sort(students, students + n, [](const Student& a, const Student& b) {
return a.score > b.score;
});
}
// 按学号由小到大排出成绩表
void sortById(Student* students, int n) {
sort(students, students + n, [](const Student& a, const Student& b) {
return a.id < b.id;
});
}
// 按学号查询学生排名及其考试成绩
void searchById(Student* students, int n, string id) {
int rank = 0;
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
rank = i + 1;
cout << "学号为" << id << "的学生排名为第" << rank << "名,考试成绩为" << students[i].score << endl;
return;
}
}
cout << "学号为" << id << "的学生不存在!" << endl;
}
// 统计各个等级的人数和所占百分比
void countByGrade(Student* students, int n) {
int excellent = 0, good = 0, medium = 0, pass = 0, fail = 0;
for (int i = 0; i < n; i++) {
if (students[i].score >= 90 && students[i].score <= 100) {
excellent++;
} else if (students[i].score >= 80 && students[i].score <= 89) {
good++;
} else if (students[i].score >= 70 && students[i].score <= 79) {
medium++;
} else if (students[i].score >= 60 && students[i].score <= 69) {
pass++;
} else {
fail++;
}
}
int total = excellent + good + medium + pass + fail;
cout << "优秀人数:" << excellent << ",占比:" << fixed << setprecision(2) << (double)excellent / total * 100 << "%" << endl;
cout << "良好人数:" << good << ",占比:" << fixed << setprecision(2) << (double)good / total * 100 << "%" << endl;
cout << "中等人数:" << medium << ",占比:" << fixed << setprecision(2) << (double)medium / total * 100 << "%" << endl;
cout << "及格人数:" << pass << ",占比:" << fixed << setprecision(2) << (double)pass / total * 100 << "%" << endl;
cout << "不及格人数:" << fail << ",占比:" << fixed << setprecision(2) << (double)fail / total * 100 << "%" << endl;
}
// 输出每个学生的学号和考试成绩
void output(Student* students, int n) {
for (int i = 0; i < n; i++) {
cout << "学号:" << students[i].id << ",成绩:" << students[i].score << endl;
}
}
int main() {
int n;
cout << "请输入参加考试的学生人数(不超过30人):";
cin >> n;
if (n > 30) {
cout << "人数超过30人,请重新输入!" << endl;
return 0;
}
Student students[30];
// 录入学生信息
input(students, n);
// 计算总分和平均分
double total, average;
calculateTotalAndAverage(students, n, total, average);
cout << "考试总分为:" << total << ",平均分为:" << average << endl;
// 按成绩由高到低排出名次表
sortByScore(students, n);
cout << "按成绩由高到低排出名次表:" << endl;
output(students, n);
// 按学号由小到大排出成绩表
sortById(students, n);
cout << "按学号由小到大排出成绩表:" << endl;
output(students, n);
// 按学号查询学生排名及其考试成绩
string id;
cout << "请输入要查询的学生学号:";
cin >> id;
searchById(students, n, id);
// 统计各个等级的人数和所占百分比
countByGrade(students, n);
return 0;
}
```
希望这个示例能够帮助您实现一个学生成绩管理系统。如果您有任何问题,请随时提出。
阅读全文