有5个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。要求用结构体变量和结构体变量的指针作函数参数。
时间: 2024-03-15 14:45:21 浏览: 58
好的,下面是一个示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5
struct Student {
char id[10];
char name[20];
float score[3];
float avg_score;
};
void print_student(struct Student s);
void calc_avg_score(struct Student *s);
int main() {
struct Student students[N] = {
{"001", "Tom", {78, 89, 92}},
{"002", "Jerry", {89, 90, 85}},
{"003", "Alice", {95, 87, 91}},
{"004", "Bob", {75, 82, 86}},
{"005", "Lucy", {88, 91, 89}}
};
struct Student *p_student = students;
struct Student max_student = *p_student;
for (int i = 0; i < N; i++) {
calc_avg_score(p_student + i); //计算平均成绩
if ((p_student + i)->avg_score > max_student.avg_score) {
max_student = *(p_student + i); //更新最高平均成绩的学生
}
}
printf("平均成绩最高的学生信息:\n");
print_student(max_student); //输出最高平均成绩的学生
return 0;
}
void print_student(struct Student s) {
printf("学号:%s\n", s.id);
printf("姓名:%s\n", s.name);
printf("成绩:%.1f %.1f %.1f\n", s.score[0], s.score[1], s.score[2]);
printf("平均成绩:%.1f\n", s.avg_score);
}
void calc_avg_score(struct Student *s) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += (s->score)[i];
}
s->avg_score = sum / 3;
}
```
这个程序定义了一个结构体 `Student`,包含学生的学号、姓名和3门课程的成绩,以及平均成绩。首先定义了一个 `students` 数组,包含 5 个学生的信息。然后定义了一个指向结构体的指针 `p_student`,指向 `students` 数组。接着定义了一个结构体 `max_student`,用来存储平均成绩最高的学生的信息,初始值为 `p_student` 指向的第一个学生。在循环中依次计算每个学生的平均成绩,并更新最高平均成绩的学生。最后输出最高平均成绩的学生的信息,使用了 `print_student` 函数来输出学生的信息,以及 `calc_avg_score` 函数来计算学生的平均成绩。需要注意的是,在函数中使用结构体变量的指针作为参数,可以直接修改结构体变量的值。
阅读全文