2.编写c语言程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从镇盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-19 10:42:52 浏览: 11
以下是一个示例程序,可以实现您的要求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 50
#define MAX_NAME_LEN 20
// 学生结构体
struct student {
int id;
char name[MAX_NAME_LEN];
int scores[3];
};
int main() {
struct student students[MAX_STUDENTS];
int num_students = 0;
int i, j, max_index;
float sum_scores[3] = {0.0}, max_score = 0.0;
// 输入学生数据
printf("请输入学生数据:\n");
while (num_students < MAX_STUDENTS) {
struct student s;
printf("学号:");
scanf("%d", &s.id);
if (s.id == -1) {
break; // 输入结束
}
printf("姓名:");
scanf("%s", s.name);
printf("三门课程的分数:");
scanf("%d %d %d", &s.scores[0], &s.scores[1], &s.scores[2]);
students[num_students++] = s;
}
// 计算平均分和最高分
for (i = 0; i < num_students; i++) {
struct student s = students[i];
for (j = 0; j < 3; j++) {
sum_scores[j] += s.scores[j];
if (s.scores[j] > max_score) {
max_score = s.scores[j];
max_index = i;
}
}
}
float avg_scores[3];
for (j = 0; j < 3; j++) {
avg_scores[j] = sum_scores[j] / num_students;
}
// 输出结果
printf("每门课程的平均分:%.2f %.2f %.2f\n", avg_scores[0], avg_scores[1], avg_scores[2]);
printf("最高分的学生:\n");
struct student max_student = students[max_index];
printf("学号:%d 姓名:%s 分数:%d %d %d\n", max_student.id, max_student.name,
max_student.scores[0], max_student.scores[1], max_student.scores[2]);
return 0;
}
```
这个程序使用了一个 `struct student` 结构体来存储每个学生的信息,包括学号、姓名和三门课程的分数。在 `main` 函数中,我们先使用一个循环读取用户输入的学生数据,直到输入 `-1` 结束。然后,我们使用两个嵌套循环计算每门课程的平均分和最高分。最后,我们输出计算得出的结果。