用c语言指针接受结构体数据求有10个学生,输入学号,姓名,三科成绩,输出所有成绩之和的平均值,输出成绩最高的学生的信息,用结构体数组传指针
时间: 2024-01-01 08:06:47 浏览: 78
C语言利用结构体数组实现学生成绩管理系统
5星 · 资源好评率100%
好的,我可以为您解答这个问题。下面是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 10
#define MAX_NAME_LEN 20
typedef struct Student {
int id;
char name[MAX_NAME_LEN];
int scores[3];
} Student;
void input_students(Student *students, int num) {
for (int i = 0; i < num; i++) {
printf("请输入第%d个学生的信息:\n", i + 1);
printf("学号:");
scanf("%d", &(students[i].id));
printf("姓名:");
scanf("%s", students[i].name);
printf("三科成绩:");
scanf("%d %d %d", &(students[i].scores[0]), &(students[i].scores[1]), &(students[i].scores[2]));
}
}
void print_students(Student *students, int num) {
for (int i = 0; i < num; i++) {
printf("学号:%d 姓名:%s 成绩:%d %d %d\n", students[i].id, students[i].name,
students[i].scores[0], students[i].scores[1], students[i].scores[2]);
}
}
float get_average_score(Student *students, int num) {
int sum = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < 3; j++) {
sum += students[i].scores[j];
}
}
return (float) sum / (num * 3);
}
void print_max_score_student(Student *students, int num) {
int max_score = -1;
int max_score_index = -1;
for (int i = 0; i < num; i++) {
int sum_score = 0;
for (int j = 0; j < 3; j++) {
sum_score += students[i].scores[j];
}
if (sum_score > max_score) {
max_score = sum_score;
max_score_index = i;
}
}
printf("成绩最高的学生是:\n");
printf("学号:%d 姓名:%s 成绩:%d %d %d\n", students[max_score_index].id, students[max_score_index].name,
students[max_score_index].scores[0], students[max_score_index].scores[1], students[max_score_index].scores[2]);
}
int main() {
Student students[MAX_STUDENT];
input_students(students, MAX_STUDENT);
printf("\n所有学生信息如下:\n");
print_students(students, MAX_STUDENT);
printf("\n所有成绩之和的平均值为:%f\n", get_average_score(students, MAX_STUDENT));
print_max_score_student(students, MAX_STUDENT);
return 0;
}
```
首先定义了一个 `Student` 结构体,其中包括学号、姓名和三科成绩。然后,定义了几个函数,分别用于输入学生信息、输出学生信息、计算平均成绩和输出成绩最高的学生信息。
在 `main` 函数中,首先定义了一个 `students` 数组,用于存储所有学生的信息。然后,调用 `input_students` 函数输入学生信息,再调用 `print_students` 函数输出学生信息。接着,调用 `get_average_score` 函数计算所有成绩之和的平均值,并输出。最后,调用 `print_max_score_student` 函数输出成绩最高的学生信息。
需要注意的是,这里使用了结构体数组传指针的方式来处理学生信息。具体来说,函数参数中的 `Student *students` 表示一个指向 `Student` 类型的指针,可以指向一个 `Student` 数组。在函数内部,可以通过 `students[i]` 访问第 `i` 个学生的信息。
阅读全文