Moodle实验6:增加学生信息并排序输出。
假定已经有三个学生信息,现在需要补充第四个学生的信息。
要求:
1) 用数组存储学生信息,包括学号、班级、三门课程的成绩、三门课程的总成绩;
2) 补充输入第四个学生信息后,按照班级从小到大的先后排序输出学生信息,同一班级内按照总成绩从低到高输出。成绩保留1位小数。
3) 已有的三个学生信息可以在数组初始化时静态赋值,已有的三个学生的信息是:
1001,11,92.5,82.5,96,271
1002,12,82.5,87.5,93.5,263.5
1003,13,97,84.5,88.5,270
第四个学生信息输入示例:
1004
12
95.8
85.6
74.9
输出示例:
1001,11,92.5,82.5,96.0,271.0
1004,12,95.8,85.6,74.9,256.3
1002,12,82.5,87.5,93.5,263.5
1003,13,97.0,84.5,88.5,270.0
#include<stdio.h>
int main(){
// 定义变量,后续使用(c语言标准过低,需要在for循环外定义变量)
int i;
int j;
// 定义结构体用于储存信息
// 定义一个结构体数组,并初始化结构体
struct student{
int stuNum;
int classNum;
float score[3];
float sum;
}stu[4]={{
1001,11,92.5,82.5,96,271
},{
1002,12,82.5,87.5,93.5,263.5
},{
1003,13,97,84.5,88.5,270
}
};
// 输入第四个学生的信息 ,并求得其总分
scanf("%d", &stu[3].stuNum);
scanf("%d", &stu[3].classNum);
for(i=0;i<3;i++){
scanf("%f", &stu[3].score[i]);
stu[3].sum+=stu[3].score[i];
}
// 利用插入排序进行排序
for(i=1;i<4;i++){
for(j=i;j>0;j--){
// 先对班级号排序,再对总分排序
if(stu[j].classNum<stu[j-1].classNum){
struct student temp = stu[j];
stu[j] = stu[j-1];
stu[j-1] = temp;
}
else if(stu[j].classNum==stu[j-1].classNum&&stu[j].sum<stu[j-1].sum){
struct student temp = stu[j];
stu[j] = stu[j-1];
stu[j-1] = temp;
}
}
}
// 将排序后的结果输出
for(i=0;i<4;i++){
printf("%d,%d,%.1f,%.1f,%.1f,%.1f\n", stu[i].stuNum, stu[i].classNum, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum);
}
return 0;
}