c语言 输入小梁,洋洋,森森的C语言,高数成绩,然后分别按照各科成绩和总分降序排序。要求使用结构体存储数据。
时间: 2024-10-21 17:03:45 浏览: 28
班级成绩管理系统.txt
在C语言中,你可以通过定义一个结构体来存储学生的姓名和他们的成绩信息,然后利用数组或者动态内存分配的方式创建这样的结构体实例。接下来,我们可以编写一个函数来处理输入、排序,并显示结果。这里是一个简单的例子:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体存放学生信息
struct Student {
char name[50];
float math_score;
float physics_score;
};
// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {
struct Student *sa = (struct Student *) a, *sb = (struct Student *) b;
// 首先按总分比较,若相同则按数学成绩排序
if (sa->total_score > sb->total_score)
return -1;
else if (sa->total_score < sb->total_score)
return 1;
else if (sa->math_score > sb->math_score)
return 1;
else
return -1; // 数学分数相同时,按物理分数降序
}
void input_students(struct Student students[], int num) {
for (int i = 0; i < num; i++) {
printf("请输入学生%d的信息(小梁,洋洋,森森)以及数学和物理成绩:", i + 1);
scanf("%s %f %f", students[i].name, &students[i].math_score, &students[i].physics_score);
students[i].total_score = students[i].math_score + students[i].physics_score;
}
}
void sort_students_descending(struct Student students[], int num) {
qsort(students, num, sizeof(struct Student), compare);
}
void display_students(struct Student students[], int num) {
printf("\n学生姓名\t数学成绩\t物理成绩\t总分\n");
for (int i = 0; i < num; i++) {
printf("%s\t%f\t%f\t%f\n", students[i].name, students[i].math_score, students[i].physics_score, students[i].total_score);
}
}
int main() {
int numStudents;
printf("请输入学生人数:");
scanf("%d", &numStudents);
struct Student students[numStudents];
input_students(students, numStudents);
sort_students_descending(students, numStudents);
display_students(students, numStudents);
return 0;
}
```
在这个程序中,`input_students` 函数用于收集数据,`sort_students_descending` 使用快速排序算法对数组进行降序排序,`display_students` 则展示排序后的结果。
阅读全文