#include<stdio.h>
#include<string.h>
#define N 10 //运行程序输入测试时,可以把这个数组改小一些输入测试
typedef struct student{
int id; //学号
char name[20]; //姓名
char subject[20]; //科目
double perf; //平时成绩
double mid; //期中成绩
double final; //期末成绩
double total; //总评成绩
char level[10]; //总评等级
} STU;
void input(STU[],int);
void output(STU[],int);
void calc(STU[],STU[],int);
void fail(STU[],STU[],int);
void sort(STU[],int);
int main(){
STU st[N],fst[N];
int k;
printf("录入学生信息:\n");
input(st, N);
printf("\n成绩处理… \n");
calc(st, N);
k = fail(st,fst,N);
sort(st, N);
printf("\n学生成绩排名情况:\n") ;
output(st, N);
printf("\n不及格学生信息:\n");
output(fst, k);
return 0;
}
void input(STU s[],int n){
int i;
for(i = 0;i < n; i++)
scanf("%d %s %s %1f %1f %1f",&s[i].id,s[i].name,s[i].subject,&s[i].perf,&s[i].mid,&s[i].final);
}
void output(STU s[],int n){
int i;
printf("………\n");
printf("学号 姓名 科目 平时 期中 期末 总评 等级\n");
for(i = 0;i < n; i++)
printf("%d %-6s %-4s %-4.0f %-4.0f %-4.1f%S\n",&s[i].id,s[i].name,s[i].subject,
&s[i].perf,&s[i].mid,&s[i].final,s[i].total,s[i].level);
}
void calc(STU s[],int n){
int n;
for(i = 0;i < n;i++){
s[i].total = s[i].perf*0.2+
s[i].mid*0.2+
s[i].final*0.6;
if(s[i].total >= 90)
strcpy(s[i].level,"优");
else if(s[i].total >= 80 &&s[i].total<90)
strcpy(s[i].level,"良");
else if(s[i].total >= 70 &&s[i].total<80)
strcpy(s[i].level,"中");
else if(s[i].total >= 60 &&s[i].total<70)
strcpy(s[i].level,"及格");
else
strcpy(s[i].level,"不及格");
}
}
int fail(STU s[],STU t[],int n){
int i;k = 0;
for(i = 0;i < n;i++)
if(s[i].total < 60)
t[k++] = s[i];
return k;
}
void sort(STU s[],int n) {
int i,j;
STU t;
for(i = 0;i < n-1;i++)
for(j = 0;j < n-1-i;j++)
if(s[j].total < s[j+1].total){
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
}