一、问题
假定已经有三个学生信息,现在需要补充第四个学生的信息。
要求:
(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>
struct score{
int xuehao;
int banji;
float gaoshu;
float wuli;
float yingyu;
float sum;
}stu1,stu2,stu3,stu4;
int main(){
int i,j,k;
struct score stu1={1001,11,92.5,82.5,96,271};
struct score stu2={1002,12,82.5,87.5,93.5,263.5};
struct score stu3={1003,13,97,84.5,88.5,270};
struct score stu[5] = {stu1,stu1,stu2,stu3,stu4};
scanf("%d%d%f%f%f",&stu[4].xuehao,&stu[4].banji,&stu[4].gaoshu,&stu[4].wuli,&stu[4].yingyu);
stu[4].sum=stu[4].gaoshu+stu[4].wuli+stu[4].yingyu;
for(j=0;j<4;j++){
for(k=1;k<4;k++){
if(stu[k].banji>stu[k+1].banji){
struct score temp=stu[k];
stu[k]=stu[k+1];
stu[k+1]=temp;
}
else if((stu[k].banji==stu[k+1].banji)&&(stu[k].sum>stu[k+1].sum)){
struct score temp2=stu[k];
stu[k]=stu[k+1];
stu[k+1]=temp2;
}
}
}
for(i=1;i<5;i++){
printf("%d,%d,%.1f,%.1f,%.1f,%.1f\n",stu[i].xuehao,stu[i].banji,stu[i].gaoshu,stu[i].wuli,stu[i].yingyu,stu[i].sum);
}
return 0;
}
三、tips
1.注意struct如何静态赋值