定义一个结构体数组存放五位学生的学号,姓名以及3门课程的成绩,编写程序从屏幕输入这五位学生的信息,对次数组按总分进行排序再打印排序后的学生信息。
时间: 2023-06-15 21:06:51 浏览: 92
以下是一个示例代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 5
#define MAX_NAME_LENGTH 20
typedef struct {
int id;
char name[MAX_NAME_LENGTH];
float grades[3];
float total;
} Student;
void swap(Student *a, Student *b) {
Student temp = *a;
*a = *b;
*b = temp;
}
void sortByTotal(Student students[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].total < students[j].total) {
swap(&students[i], &students[j]);
}
}
}
}
int main() {
Student students[MAX_STUDENTS];
printf("请逐一输入五位学生的信息:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("第%d位学生的学号:", i+1);
scanf("%d", &students[i].id);
printf("第%d位学生的姓名:", i+1);
scanf("%s", students[i].name);
printf("第%d位学生的三门课程成绩:", i+1);
scanf("%f %f %f", &students[i].grades[0], &students[i].grades[1], &students[i].grades[2]);
students[i].total = students[i].grades[0] + students[i].grades[1] + students[i].grades[2];
}
sortByTotal(students, MAX_STUDENTS);
printf("\n按总分排序后的学生信息:\n");
for (int i = 0; i < MAX_STUDENTS; i++) {
printf("学号:%d,姓名:%s,总分:%.2f,三门课程成绩:%.2f %.2f %.2f\n",
students[i].id, students[i].name, students[i].total,
students[i].grades[0], students[i].grades[1], students[i].grades[2]);
}
return 0;
}
```
输出示例:
```
请逐一输入五位学生的信息:
第1位学生的学号:1001
第1位学生的姓名:张三
第1位学生的三门课程成绩:85.5 76.0 92.0
第2位学生的学号:1002
第2位学生的姓名:李四
第2位学生的三门课程成绩:91.0 83.5 88.5
第3位学生的学号:1003
第3位学生的姓名:王五
第3位学生的三门课程成绩:78.5 69.0 82.5
第4位学生的学号:1004
第4位学生的姓名:赵六
第4位学生的三门课程成绩:89.5 95.0 91.5
第5位学生的学号:1005
第5位学生的姓名:钱七
第5位学生的三门课程成绩:84.0 87.5 90.0
按总分排序后的学生信息:
学号:1004,姓名:赵六,总分:276.00,三门课程成绩:89.50 95.00 91.50
学号:1002,姓名:李四,总分:263.00,三门课程成绩:91.00 83.50 88.50
学号:1001,姓名:张三,总分:253.50,三门课程成绩:85.50 76.00 92.00
学号:1005,姓名:钱七,总分:261.50,三门课程成绩:84.00 87.50 90.00
学号:1003,姓名:王五,总分:230.00,三门课程成绩:78.50 69.00 82.50
```
阅读全文