C语言编写一个班的学生的数据包含学号、姓名和4门课程的成绩。输入数据,计算学生的平均成绩,输出所有学生的学号、姓名、各门课程的成绩和平均成绩,输出平均成绩最高的学生数据。要求使用结构体实现。
时间: 2024-05-17 12:12:59 浏览: 89
C语言程序设计-统计出若干个学生的平均成绩,最高分以及得最高分的人数;
5星 · 资源好评率100%
好的,以下是代码实现:
```c
#include <stdio.h>
#define NUM_OF_COURSES 4 // 课程数量
typedef struct {
int id; // 学号
char name[20]; // 姓名
float grades[NUM_OF_COURSES]; // 成绩数组
float avg_grade; // 平均成绩
} Student;
// 计算平均成绩
void calc_avg_grade(Student *student) {
float sum = 0.0;
for (int i = 0; i < NUM_OF_COURSES; i++) {
sum += student->grades[i];
}
student->avg_grade = sum / NUM_OF_COURSES;
}
int main() {
int num_of_students; // 学生数量
printf("请输入学生数量:");
scanf("%d", &num_of_students);
Student students[num_of_students]; // 学生数组
// 输入学生数据
printf("请输入每个学生的学号、姓名和%d门课程的成绩:\n", NUM_OF_COURSES);
for (int i = 0; i < num_of_students; i++) {
printf("请输入第%d个学生的数据:\n", i + 1);
scanf("%d %s", &students[i].id, students[i].name);
for (int j = 0; j < NUM_OF_COURSES; j++) {
scanf("%f", &students[i].grades[j]);
}
calc_avg_grade(&students[i]); // 计算平均成绩
}
// 输出所有学生数据
printf("所有学生的数据如下:\n");
for (int i = 0; i < num_of_students; i++) {
printf("学号:%d,姓名:%s,成绩:", students[i].id, students[i].name);
for (int j = 0; j < NUM_OF_COURSES; j++) {
printf("%.1f ", students[i].grades[j]);
}
printf("平均成绩:%.1f\n", students[i].avg_grade);
}
// 输出平均成绩最高的学生数据
int max_index = 0; // 最高平均成绩的学生下标
for (int i = 1; i < num_of_students; i++) {
if (students[i].avg_grade > students[max_index].avg_grade) {
max_index = i;
}
}
printf("平均成绩最高的学生是:学号:%d,姓名:%s,平均成绩:%.1f\n",
students[max_index].id, students[max_index].name, students[max_index].avg_grade);
return 0;
}
```
这里使用了结构体来存储学生的数据,使用了一个函数 `calc_avg_grade` 来计算平均成绩。最后输出了所有学生的数据和平均成绩最高的学生数据。
阅读全文