编写程序,用结构体存放学生的若干信息,包括学号、姓名和3门课程的分数,从键盘输入数据,输出每门课程的总平均分,以及最高分的学生的完整数据。
时间: 2024-03-24 18:37:11 浏览: 22
好的,这是一个比较典型的结构体应用场景,可以按照如下步骤实现:
1. 定义结构体类型,包含学号、姓名和3门课程的分数:
```c
typedef struct {
int id; // 学号
char name[20]; // 姓名
double score[3]; // 3门课程的分数
} Student;
```
2. 从键盘输入数据,保存到结构体数组中:
```c
int n; // 学生数量
printf("请输入学生数量:");
scanf("%d", &n);
Student students[n]; // 定义结构体数组
// 逐个输入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的信息(学号、姓名、3门课程分数):", i+1);
scanf("%d %s %lf %lf %lf", &students[i].id, students[i].name, &students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
```
3. 计算每门课程的总平均分,并输出:
```c
double avg[3] = {0}; // 3门课程的平均分
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
avg[j] += students[i].score[j];
}
}
for (int j = 0; j < 3; j++) {
avg[j] /= n;
printf("第%d门课程的平均分为:%.2lf\n", j+1, avg[j]);
}
```
4. 找到最高分的学生,并输出完整数据:
```c
int max_index = 0; // 最高分学生的下标
double max_score = 0; // 最高分
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 0; j < 3; j++) {
sum += students[i].score[j];
}
if (sum > max_score) {
max_score = sum;
max_index = i;
}
}
printf("最高分的学生信息如下:\n");
printf("学号:%d 姓名:%s 课程1分数:%.2lf 课程2分数:%.2lf 课程3分数:%.2lf\n", students[max_index].id, students[max_index].name, students[max_index].score[0], students[max_index].score[1], students[max_index].score[2]);
```
完整代码如下: