C语言 有6个学生,每个学生的数据包括学号、姓名、性别、4门课的成绩、总成绩、平均成绩。从键盘输入每个学生信息及4门课成绩,总成绩及平均成绩要通过4门课算出。然后用选择排序法按照总成绩由高到低对6个学生数据进行排序并输出排序结果。
时间: 2023-12-15 19:22:40 浏览: 160
以下是一个示例代码,可以实现你的要求:
```c
#include <stdio.h>
#include <string.h>
struct student {
int id;
char name[20];
char gender[5];
float score[4];
float total_score;
float avg_score;
};
void input_student_info(struct student* s) {
printf("请输入学生的学号:");
scanf("%d", &s->id);
printf("请输入学生的姓名:");
scanf("%s", s->name);
printf("请输入学生的性别:");
scanf("%s", s->gender);
printf("请输入学生的四门课成绩:\n");
for (int i = 0; i < 4; i++) {
printf("第%d门课成绩:", i+1);
scanf("%f", &s->score[i]);
s->total_score += s->score[i];
}
s->avg_score = s->total_score / 4;
}
void print_student_info(struct student* s) {
printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\n", s->id, s->name, s->gender, s->score[0], s->score[1], s->score[2], s->score[3], s->total_score, s->avg_score);
}
void sort_student(struct student s[], int n) {
for (int i = 0; i < n-1; i++) {
int max_idx = i;
for (int j = i+1; j < n; j++) {
if (s[j].total_score > s[max_idx].total_score) {
max_idx = j;
}
}
if (max_idx != i) {
struct student temp = s[i];
s[i] = s[max_idx];
s[max_idx] = temp;
}
}
}
int main() {
struct student s[6];
printf("请输入6个学生的信息:\n");
for (int i = 0; i < 6; i++) {
input_student_info(&s[i]);
}
printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t总成绩\t平均成绩\n");
for (int i = 0; i < 6; i++) {
print_student_info(&s[i]);
}
sort_student(s, 6);
printf("按照总成绩从高到低排序后的结果为:\n");
printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t总成绩\t平均成绩\n");
for (int i = 0; i < 6; i++) {
print_student_info(&s[i]);
}
return 0;
}
```
以上代码中,首先定义了一个 `struct student` 结构体,用于存储每个学生的信息。然后通过 `input_student_info` 函数从键盘输入学生信息,并计算出总成绩和平均成绩。接着通过 `print_student_info` 函数输出学生信息。最后通过 `sort_student` 函数实现选择排序,并输出排序结果。在 `main` 函数中,首先输入6个学生的信息,然后按照总成绩从高到低排序并输出结果。
阅读全文