某班有10个学生,进行了“数学”、“语文”、“英语”、“C语言”等科目的考试,编写程序: (1)将考试成绩输入一个二维数组; (2)求每门课的平均成绩、每门课的不及格学生的人数及每门课的最高分与最低分; (3)求每个学生的平均成绩、总分、不及格门数; (4)按学生平均成绩的高低排序并输出。
时间: 2023-12-18 11:05:49 浏览: 420
以下是一个可能的解决方案,使用 C++ 语言实现:
```c++
#include <iostream>
#include <algorithm> // 用于排序函数
using namespace std;
const int NUM_STUDENTS = 10;
const int NUM_SUBJECTS = 4;
int main() {
int scores[NUM_STUDENTS][NUM_SUBJECTS]; // 存储每个学生的每门科目成绩
// 输入每个学生的成绩
for (int i = 0; i < NUM_STUDENTS; i++) {
cout << "请输入第" << i+1 << "个学生的成绩(数学 语文 英语 C语言):";
for (int j = 0; j < NUM_SUBJECTS; j++) {
cin >> scores[i][j];
}
}
// 计算每门课的平均成绩、不及格人数、最高分和最低分
double avg_scores[NUM_SUBJECTS] = {0}; // 平均成绩
int num_failed[NUM_SUBJECTS] = {0}; // 不及格人数
int max_scores[NUM_SUBJECTS] = {0}; // 最高分
int min_scores[NUM_SUBJECTS] = {100}; // 最低分(初始化为100分)
for (int j = 0; j < NUM_SUBJECTS; j++) {
for (int i = 0; i < NUM_STUDENTS; i++) {
avg_scores[j] += scores[i][j];
if (scores[i][j] < 60) {
num_failed[j]++;
}
max_scores[j] = max(max_scores[j], scores[i][j]);
min_scores[j] = min(min_scores[j], scores[i][j]);
}
avg_scores[j] /= NUM_STUDENTS;
}
// 输出每门课的平均成绩、不及格人数、最高分和最低分
cout << "每门课的平均成绩、不及格人数、最高分和最低分如下:" << endl;
cout << "数学:平均成绩:" << avg_scores[0] << ",不及格人数:" << num_failed[0] << ",最高分:" << max_scores[0] << ",最低分:" << min_scores[0] << endl;
cout << "语文:平均成绩:" << avg_scores[1] << ",不及格人数:" << num_failed[1] << ",最高分:" << max_scores[1] << ",最低分:" << min_scores[1] << endl;
cout << "英语:平均成绩:" << avg_scores[2] << ",不及格人数:" << num_failed[2] << ",最高分:" << max_scores[2] << ",最低分:" << min_scores[2] << endl;
cout << "C语言:平均成绩:" << avg_scores[3] << ",不及格人数:" << num_failed[3] << ",最高分:" << max_scores[3] << ",最低分:" << min_scores[3] << endl;
// 计算每个学生的平均成绩、总分、不及格门数
double avg_scores_per_student[NUM_STUDENTS] = {0}; // 每个学生的平均成绩
int total_scores[NUM_STUDENTS] = {0}; // 每个学生的总分
int num_failed_per_student[NUM_STUDENTS] = {0}; // 每个学生的不及格门数
for (int i = 0; i < NUM_STUDENTS; i++) {
for (int j = 0; j < NUM_SUBJECTS; j++) {
total_scores[i] += scores[i][j];
if (scores[i][j] < 60) {
num_failed_per_student[i]++;
}
}
avg_scores_per_student[i] = total_scores[i] / double(NUM_SUBJECTS);
}
// 按学生平均成绩排序并输出
int idx[NUM_STUDENTS];
for (int i = 0; i < NUM_STUDENTS; i++) {
idx[i] = i;
}
sort(idx, idx+NUM_STUDENTS, [&](int a, int b) {return avg_scores_per_student[a] > avg_scores_per_student[b];});
cout << "按学生平均成绩排序如下:" << endl;
for (int i = 0; i < NUM_STUDENTS; i++) {
int j = idx[i];
cout << "第" << j+1 << "个学生:";
cout << "平均成绩:" << avg_scores_per_student[j] << ",总分:" << total_scores[j] << ",不及格门数:" << num_failed_per_student[j] << endl;
}
return 0;
}
```
这个程序的主要思路是,先输入每个学生的成绩,然后对每门课计算平均成绩、不及格人数、最高分和最低分,再对每个学生计算平均成绩、总分和不及格门数,最后按学生平均成绩排序并输出。在计算平均成绩等统计数据时,使用了数组和循环结构。在排序时,使用了 `sort` 函数和 Lambda 表达式。
阅读全文