13.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信息,包括学号、性别、姓名和平均成绩。C语言
时间: 2024-12-14 15:28:22 浏览: 3
and1.rar_设计 一个 学生成绩 排名 系统
5星 · 资源好评率100%
在C语言中,你可以使用结构体来存储学生的相关信息,并通过动态内存分配和数组来处理N个学生。首先,定义一个包含学号、性别、姓名和四个成绩的结构体:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char gender[2]; // 假设性别只可能是'M'或'F'
char name[50];
float scores[4];
} Student;
void inputStudent(Student* student) {
scanf("%d", &student->id);
getchar(); // 消除回车符的影响
scanf(" %c", student->gender);
scanf("%s", student->name);
for (int i = 0; i < 4; i++) {
scanf("%f", &student->scores[i]);
}
}
float calculateAverage(const Student* student) {
float sum = 0;
for (int i = 0; i < 4; i++) {
sum += student->scores[i];
}
return sum / 4;
}
// 找到最高平均分的学生并输出
void findHighestAverage(int n, Student students[]) {
Student maxScoreStudent = {0}; // 初始化为默认值
float maxAverage = -1;
for (int i = 0; i < n; i++) {
if (calculateAverage(&students[i]) > maxAverage) {
maxScoreStudent = students[i];
maxAverage = calculateAverage(&students[i]);
}
}
printf("学生信息:\n");
printf("学号: %d\n", maxScoreStudent.id);
printf("性别: %c\n", maxScoreStudent.gender);
printf("姓名: %s\n", maxScoreStudent.name);
printf("平均成绩: %.2f\n", maxAverage);
}
int main() {
int n;
printf("请输入学生人数: ");
scanf("%d", &n);
Student* students = malloc(n * sizeof(Student));
if (!students) {
perror("Memory allocation failed");
return 1;
}
for (int i = 0; i < n; i++) {
inputStudent(students + i);
}
findHighestAverage(n, students);
free(students); // 释放内存
return 0;
}
```
在这个程序中,`inputStudent()`函数用于接收用户输入,`calculateAverage()`计算单个学生的平均成绩,`findHighestAverage()`函数遍历所有学生找到最高平均分的学生并打印其信息。记得在结束时释放动态分配的内存。
阅读全文