原理:
- 使用结构体定义每个学生的信息,包括学号、姓名和成绩。
- 使用结构体数组来存储所有学生信息。
- 采用排序算法,按照学生的成绩对结构体数组进行从大到小排序。
- 输出排序后的结构体数组,即为按照成绩从高到低输出各学生信息。
流程:
- 定义结构体
student
包含学号、姓名和成绩属性。 - 定义结构体数组
stu_arr
存储所有学生的信息。 - 输入每个学生的信息。
- 使用排序算法(如冒泡排序等),按照学生的成绩对结构体数组进行从大到小排序。
- 输出排序后的结构体数组,即为按照成绩从高到低输出各学生信息
重点: 本题重点在于对结构体数组的了解和对冒泡排序算法的应用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
struct student
{
char id[10]; // 学号
char name[20]; // 姓名
int score; // 成绩
};
// 交换两个结构体变量
void swap(struct student *a, struct student *b)
{
struct student temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int i, j;
struct student stu[5], temp;
printf("请输入5个学生的信息(学号,姓名,成绩):\n");
for (i = 0; i < 5; i++)
{
scanf("%s %s %d", &stu[i].id, &stu[i].name, &stu[i].score);
}
// 冒泡排序
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (stu[j].score < stu[j + 1].score)
{ // 按成绩从大到小排序
swap(&stu[j], &stu[j + 1]);
}
}
}
// 输出排序后的学生信息
printf("\n按成绩排名结果:\n");
for (i = 0; i < 5; i++)
{
printf("学号:%s\t姓名:%s\t成绩:%d\n", stu[i].id, stu[i].name, stu[i].score);
}
return 0;
}