定义4个学生,完成按成绩升序排序
问题1:如何存储4个学生的信息?
通过结构体数组实现
问题2:如何输入或输出4个学生的信息?
通过循环实现对数组中所有成员结构体的遍历,可以遍历到每个成员,那么我们就可以对每个成员的信息进行修改,赋值。
问题3:如何对4个学生信息进行排序?排序如何进行交换?
因为排序是根据学生的成绩进行排序,所以,我们也是通过冒泡排序,每次需要交换时,需要交换的是整个结构体而不是对单个成员进行交换
结构体成员可以直接进行赋值。
#include<stdio.h>
int main(void)
{
struct student{
int id;
char name[30];
double score;
}a[4],tmp;
printf("按以下格式输入(学号 姓名 成绩):\n");
int i = 0;
for(i = 0;i < 4;i++){
printf("请输入%d个学生:",i + 1);
scanf("%d %s %lf",&a[i].id,a[i].name,&a[i].score);
}
printf("***排序前***\n");
for(i = 0;i < 4;i++){
printf("%d %s %.2lf\n",a[i].id,a[i].name,a[i].score);
}
printf("***排序后***\n");
int j = 0;
struct tmp{};
for(i = 0;i < 3;i++){
for(j = 0 ; j < 3 - i ; j++){
if(a[j].score > a[j + 1].score){
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for(i = 0;i < 4;i++){
printf("NO:%d\t姓名: %s\t成绩: %.2lf\n",a[i].id,a[i].name,a[i].score);
}
return 0;
}
效果图
按以下格式输入(学号 姓名 成绩):
请输入1个学生:1 zhang 15
请输入2个学生:2 li 86
请输入3个学生:3 wang 99
请输入4个学生:4 luo 100
排序前
1 zhang 15.00
2 li 86.00
3 wang 99.00
4 luo 100.00
排序后
NO:1 姓名: zhang 成绩: 15.00
NO:2 姓名: li 成绩: 86.00
NO:3 姓名: wang 成绩: 99.00
NO:4 姓名: luo 成绩: 100.00