)用结构体数组存储某班30 名学生的信息,每个学生的教据项有学号、姓名、性别和四门课的成绩。编写程序计算四门课的平均成绩,要求用键念输入学生数据,再按平均成绩排序,并输出含平均成绩的报表。.
时间: 2023-12-23 15:06:23 浏览: 90
好的,以下是一个简单的 C 语言程序,实现了你的需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 30
#define MAX_NAME_LENGTH 20
typedef struct {
char id[10];
char name[MAX_NAME_LENGTH];
char gender[5];
int scores[4];
float average;
} Student;
void input_student_info(Student* student) {
printf("请输入学生的学号、姓名、性别、四门课的成绩(用空格隔开):\n");
scanf("%s %s %s %d %d %d %d", student->id, student->name, student->gender, &student->scores[0], &student->scores[1], &student->scores[2], &student->scores[3]);
float sum = 0;
for (int i = 0; i < 4; i++) {
sum += student->scores[i];
}
student->average = sum / 4;
}
void print_student_info(Student student) {
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", student.id, student.name, student.gender, student.scores[0], student.scores[1], student.scores[2], student.scores[3], student.average);
}
void swap_student(Student* a, Student* b) {
Student tmp = *a;
*a = *b;
*b = tmp;
}
void sort_by_average(Student students[], int n) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i].average < students[j].average) {
swap_student(&students[i], &students[j]);
}
}
}
}
int main() {
Student students[MAX_STUDENT_NUM];
int n;
printf("请输入学生人数(不超过 %d):\n", MAX_STUDENT_NUM);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
input_student_info(&students[i]);
}
sort_by_average(students, n);
printf("学号\t姓名\t性别\t语文\t数学\t英语\t物理\t平均成绩\n");
for (int i = 0; i < n; i++) {
print_student_info(students[i]);
}
return 0;
}
```
程序中,我们用 `Student` 结构体来存储一个学生的信息,其中包括学号、姓名、性别、四门课的成绩和平均成绩。我们用 `input_student_info` 函数来读取学生的信息,计算平均成绩;用 `print_student_info` 函数来打印学生的信息;用 `swap_student` 函数来交换两个学生的信息;用 `sort_by_average` 函数来按平均成绩排序。在 `main` 函数中,我们先读取学生人数,然后循环读取每个学生的信息,最后按平均成绩排序并打印报表。
阅读全文