怎么编写这个程序,我遇到了一点点困难

有一个班30个学生,已知每个学生有5门科目的成绩,要求输出平均成绩最高的同学的成绩以及该学生的序号。

假设定义了一个名为 scores 的二维数组,其中 scores[i][j] 表示第 i 个学生的第 j 门科目的成绩

#include <stdio.h>

#define NUM_STUDENTS 30
#define NUM_SUBJECTS 5

int main(void) {
  int scores[NUM_STUDENTS][NUM_SUBJECTS];

  // 为了简化代码,假设你已经在此处输入了每个学生的成绩

  int i, j;
  int highest_average_index = 0;  // 最高平均分的学生的序号
  int highest_average = 0;  // 最高平均分

  // 遍历学生
  for (i = 0; i < NUM_STUDENTS; i++) {
    int total = 0;  // 该学生的总分

    // 遍历该学生的每门科目
    for (j = 0; j < NUM_SUBJECTS; j++) {
      total += scores[i][j];
    }

    // 计算该学生的平均分
    int average = total / NUM_SUBJECTS;

    // 如果平均分最高,则更新最高平均分和对应的学生序号
    if (average > highest_average) {
      highest_average = average;
      highest_average_index = i;
    }
  }

  // 输出最高平均分和对应的学生序号
  printf("Student %d has the highest average score of %d\n", highest_average_index + 1, highest_average)

望采纳

详细的分析解答和代码实现及注释如下,望采纳

可以使用一个二维数组来存储每个学生的成绩,然后遍历数组,求出每个学生的平均成绩,并记录下最大的平均成绩以及对应的学生的序号。

#include <iostream>
#include <cstring>
using namespace std;
const int N = 30;
struct Student {
    int num;
    float score[5];
    float average;
}
stu[N];
int main() {
    for (int i = 0; i < N; i++) {
        cin >> stu[i].num;
        for (int j = 0; j < 5; j++) {
            cin >> stu[i].score[j];
        }
    }
    // 计算平均分
    for (int i = 0; i < N; i++) {
        float sum = 0;
        for (int j = 0; j < 5; j++) {
            sum += stu[i].score[j];
        }
        stu[i].average = sum / 5.0;
    }
    // 找到平均分最高的学生
    int max_index = 0;
    for (int i = 1; i < N; i++) {
        if (stu[i].average > stu[max_index].average) {
            max_index = i;
        }
    }
    cout << "序号: " << stu[max_index].num << endl;
    cout << "成绩: ";
    for (int i = 0; i < 5; i++) {
        cout << stu[max_index].score[i] << " ";
    }
    cout << endl;
    return 0;
}