输入:每个学生一行,先输入学号,接着是各科成绩(0~5),科目门次不定,中间用空格隔开。
输出:每个学生的平均分(一位小数)从大到小排列输出,挂科(分数<=2)2门以上的同学按门次从小到大输出。
样例:
Input:
1, 4, 5, 4, 5
2, 5
3, 2, 2, 1
4, 2, 1, 3
Output:
平均分:
2, 5
1, 4.5
4, 2
3, 1.7
挂科:
4, 2
3, 3
题目比较简单,用的方法也比较笨。
#include <string.h>
#include <stdio.h>
struct stu
{
int num;
double per;
int fail;
};
int main()
{
struct stu student[100];
int i,j,n1,n2,tt;
double fen,t;
char nouse;
for (i=0;i<100;i++){
student[i].num = 0;
student[i].per = 0;
student[i].fail = 0;
}
for(i=0;;i++){
// 一共有i个学生
scanf("%c",&nouse);
if (nouse == '\n'){
break;
}
else{
student[i].num = nouse-'0';
}
scanf("%c",&nouse);
for(j=0;;j++){
scanf("%lf%c",&fen,&nouse);
student[i].per += fen;
if (fen <= 2){
student[i].fail ++;
}
if (nouse == '\n'){
student[i].per = student[i].per/(j+1);
break;
}
}
}
for(n1=0;n1<i;n1++){
for(n2=0;n2<i-n1-1;n2++){
if(student[n2].per<student[n2+1].per){
t = student[n2+1].per;
student[n2+1].per = student[n2].per;
student[n2].per = t;
tt = student[n2+1].num;
student[n2+1].num = student[n2].num;
student[n2].num = tt;
tt = student[n2+1].fail;
student[n2+1].fail = student[n2].fail;
student[n2].fail = tt;
}
}
}
printf("平均分:\n");
for(j=0;j<i;j++){
printf("%d %.1f\n",student[j].num,student[j].per);
}
for(n1=0;n1<i;n1++){
for(n2=0;n2<i-n1-1;n2++){
if(student[n2].fail>student[n2+1].fail){
t = student[n2+1].per;
student[n2+1].per = student[n2].per;
student[n2].per = t;
tt = student[n2+1].num;
student[n2+1].num = student[n2].num;
student[n2].num = tt;
tt = student[n2+1].fail;
student[n2+1].fail = student[n2].fail;
student[n2].fail = tt;
}
}
}
printf("挂科:\n");
for(j=0;j<i;j++){
if (student[j].fail != 0)
printf("%d %d\n",student[j].num,student[j].fail);
}
return 0;
}