已知三名学生三科成绩,求总成绩并按成绩排名输出
时间: 2023-07-11 07:50:27 浏览: 128
好的,你可以使用结构体来存储每个学生的信息,包括姓名和三科成绩。然后,你可以计算每个学生的总成绩,并将学生按照总成绩从高到低排名输出。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 3
#define NUM_SUBJECTS 3
struct student {
char name[20];
int scores[NUM_SUBJECTS];
int total_score;
};
void calc_total_score(struct student *s) {
int i, sum = 0;
for (i = 0; i < NUM_SUBJECTS; i++) {
sum += s->scores[i];
}
s->total_score = sum;
}
void print_students(struct student *students, int num_students) {
int i, j;
// 冒泡排序,按总成绩从高到低排名
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (students[j].total_score < students[j + 1].total_score) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// 输出排名
for (i = 0; i < num_students; i++) {
printf("%s: %d\n", students[i].name, students[i].total_score);
}
}
int main() {
struct student students[NUM_STUDENTS];
int i, j;
// 输入学生信息和成绩
for (i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d名学生的姓名:", i + 1);
scanf("%s", students[i].name);
for (j = 0; j < NUM_SUBJECTS; j++) {
printf("请输入%s的第%d科成绩:", students[i].name, j + 1);
scanf("%d", &students[i].scores[j]);
}
calc_total_score(&students[i]);
}
// 输出排名
print_students(students, NUM_STUDENTS);
return 0;
}
```
这个示例代码首先定义了一个 `student` 结构体,包括学生的姓名、三科成绩和总成绩。然后,它定义了两个函数,`calc_total_score` 函数用来计算学生的总成绩,`print_students` 函数用来按照总成绩排名输出学生信息。
在 `main` 函数中,它首先使用循环输入每个学生的信息和成绩,并计算每个学生的总成绩。然后,它调用 `print_students` 函数输出排名。
希望这个示例代码可以帮助到你。
阅读全文