一个班上有30名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课的成绩。要求打印三门课程平均成绩最高分的学生记录。 1、定义一个结构体类型,包含学号、姓名、成绩等成员。 2、输入每个同学的三门课成绩。
时间: 2024-09-19 13:09:01 浏览: 171
首先,我们定义一个结构体(struct)类型,用于存储学生的信息。这个结构体可以命名为`Student`:
```c
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
float course1_score; // 第一门课程成绩
float course2_score; // 第二门课程成绩
float course3_score; // 第三门课程成绩
} Student;
```
接下来,我们需要编写函数来处理输入和查找最高平均分的学生:
1. 创建一个名为`input_student_data`的函数,用于从键盘获取学生的各项信息并创建一个`Student`类型的记录:
```c
void input_student_data(Student* student) {
printf("请输入学号:");
scanf("%d", &student->student_id);
printf("请输入姓名:");
fgets(student->name, sizeof(student->name), stdin); // 防止换行符污染输入
getchar(); // 消耗掉回车符
printf("请输入第一门课程成绩:");
scanf("%f", &student->course1_score);
printf("请输入第二门课程成绩:");
scanf("%f", &student->course2_score);
printf("请输入第三门课程成绩:");
scanf("%f", &student->course3_score);
}
```
2. 创建一个名为`find_highest_average`的函数,遍历所有学生记录,找出平均成绩最高的学生:
```c
void find_highest_average(Student students[], int size) {
Student max_avg_student = students[0];
for (int i = 1; i < size; i++) {
if ((students[i].course1_score + students[i].course2_score + students[i].course3_score) / 3 > max_avg_student.course1_score + max_avg_student.course2_score + max_avg_student.course3_score) {
max_avg_student = students[i];
}
}
printf("最高平均分的学生记录:\n");
printf("学号:%d\n", max_avg_student.student_id);
printf("姓名:%s\n", max_avg_student.name);
printf("平均成绩:%.2f\n", (max_avg_student.course1_score + max_avg_student.course2_score + max_avg_student.course3_score) / 3.0);
}
```
现在你可以按照以下步骤运行程序:
1. 初始化一个`Student`数组,并设置数组大小为30(假设全班有30人)。
2. 使用`input_student_data`函数为每个学生收集数据。
3. 调用`find_highest_average`函数找到平均成绩最高的学生并打印其记录。
阅读全文