有 N 个学生,每个学生的数据包括学号、姓名、三门课的成绩。
从键盘输入 N 个学生的数据,要求打印出 3 门课的总平均成绩,以及总分最高的学生的数据(包括学号、姓名、3 门课成绩)。
第一行包含一个整数 N,其后 N 行,每行包含两个字符串及三个整数,分别表示每个学生的学号、姓名、
3 科成绩。以空格分开。1<=N<=100
学号、姓名的长度不超过 10,三科成绩数据范围在 [0,100] 内
数据保证总分最高的同学只有一位
第一行输出三个整数,表示各门课的平均成绩。数据保证平均成绩一定为整数。
第二行输出总分最高的学生的数据(包括学号、姓名、3 门课成绩,以空格隔开)。
在代码开头,我们引入了stdio.h头文件以使用输入/输出函数,引入了string.h头文件以使用字符串相关的函数。同时,我们定义了两个常量MAX_LENGTH和MAX_STUDENTS,分别表示学生信息中字符串的最大长度和最大学生人数。
#include
#include
#define MAX_LENGTH 10
#define MAX_STUDENTS 100
我们使用结构体Student来表示每个学生的信息。结构体包含了学生的学号、姓名、三门课程的成绩和总分。
typedef struct
{
char id[MAX_LENGTH];
char name[MAX_LENGTH];
int scores[3];
int total_score;
} Student;
在主函数中,我们首先声明并读取学生的总人数N。 然后,我们定义一个数组students来存储学生的信息,数组大小为MAX_STUDENTS。
我们还定义一个数组total_scores来存储各门课程的总分,初始值为0。
变量max_total_score用于保存总分最高的学生的分数,初始值为0。
max_student_data用于保存总分最高的学生的数据,数组大小根据最大字符串长度计算得出。
int main()
{
int N;
scanf("%d", &N); // 输入学生人数
Student students[MAX_STUDENTS]; // 存储学生信息的数组
int total_scores[3] = {0}; // 各门课程的总分
int max_total_score = 0;
char max_student_data[MAX_LENGTH * 4 + 3]; // 保存总分最高的学生的数据
for (int i = 0; i < N; i++)
{
scanf("%s %s %d %d %d", students[i].id, students[i].name,
&students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算总分
students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];
// 更新各门课程的总分
for (int j = 0; j < 3; j++)
{
total_scores[j] += students[i].scores[j];
}
// 判断是否为总分最高的学生
if (students[i].total_score > max_total_score)
{
max_total_score = students[i].total_score;
sprintf(max_student_data, "%s %s %d %d %d", students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2]);
}
}
在循环中,我们使用scanf函数按照指定格式读取学生的学号、姓名和三门课程的成绩,分别保存到对应的学生结构体中。然后,我们计算每个学生的总分,并通过循环更新各门课程的总分。同时,我们判断每个学生的总分是否超过max_total_score,如果是则更新max_total_score和max_student_data。
通过循环遍历total_scores数组,我们计算每门课程的平均成绩,并将结果保存到average_scores数组中。
int average_scores[3];
for (int i = 0; i < 3; i++) {
average_scores[i] = total_scores[i] / N;
}
printf("%d %d %d\n", average_scores[0], average_scores[1], average_scores[2]);
printf("%s\n", max_student_data);
总体效果如下
#include
#include
#define MAX_LENGTH 10
#define MAX_STUDENTS 100
// 定义学生结构体
typedef struct
{
char id[MAX_LENGTH];
char name[MAX_LENGTH];
int scores[3];
int total_score;
} Student;
int main()
{
int N;
scanf("%d", &N); // 输入学生人数
Student students[MAX_STUDENTS]; // 存储学生信息的数组
int total_scores[3] = {0}; // 各门课程的总分
int max_total_score = 0;
char max_student_data[MAX_LENGTH * 4 + 3]; // 保存总分最高的学生的数据
// 循环读取每个学生的信息并计算总分和各门课程的总分
for (int i = 0; i < N; i++) {
scanf("%s %s %d %d %d", students[i].id, students[i].name,
&students[i].scores[0], &students[i].scores[1], &students[i].scores[2]);
// 计算总分
students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2];
// 更新各门课程的总分
for (int j = 0; j < 3; j++)
{
total_scores[j] += students[i].scores[j];
}
// 判断是否为总分最高的学生
if (students[i].total_score > max_total_score)
{
max_total_score = students[i].total_score;
sprintf(max_student_data, "%s %s %d %d %d", students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2]);
}
}
// 计算各门课程的平均成绩
int average_scores[3];
for (int i = 0; i < 3; i++)
{
average_scores[i] = total_scores[i] / N;
}
// 输出结果
printf("%d %d %d\n", average_scores[0], average_scores[1], average_scores[2]);
printf("%s\n", max_student_data);
return 0;
}