有一个学生结构体,其数据成员有: 学号, 姓名, 3 门课程。从键盘上输入 5 个学生 的信息。要求输出:
(1) 按照学号递增输出全部学生信息,每个学生的信息一行。(格式: 学号 姓名 分数 1 分数 2 分数 3 总分)
(2) 输出每门课程最高分的学生的信息
(3) 输出每门课程的平均分
(4) 按照总分输出学生排名
#include <stdio.h>
#include <stdlib.h>
//构造结构体,用qsort函数排序
typedef struct student{
int num;
char name[20];
float score1;
float score2;
float score3;
}stu,*pstu;
上面写在头文件里面,命名func.h
--------------------------------------------------
#include"func.h"
int compare(const void* left,const void* right)
{
pstu p0=(pstu)left;
pstu p1=(pstu)right;
return p0->num-p1->num;
}
int compare2(const void* left,const void* right)
{
pstu p0=(pstu)left;
pstu p1=(pstu)right;
return p0->score1-p1->score1;
}
int compare3(const void* left,const void* right)
{
pstu p0=(pstu)left;
pstu p1=(pstu)right;
return p0->score2-p1->score2;
}
int compare4(const void* left,const void* right)
{
pstu p0=(pstu)left;
pstu p1=(pstu)right;
return p0->score3-p1->score3;
}
int compare5(const void* left,const void* right)
{
pstu p0=(pstu)left;
pstu p1=(pstu)right;
return (p1->score2+p1->score1+p1->score3)-(p0->score2+p0->score1+p0->score3);
}
int main()
{
stu ai[5];
stu *p;
int i;
int b=0;
float ar[3];
p=ai;
printf("请输入5个同学的信息:\n");
for(i=0;i<5;i++)
{
scanf("%d%s%f%f%f",&ai[i].num,ai[i].name,&ai[i].score1,&ai[i].score2,&ai[i].score3);
}
ar[0]=(ai[0].score1+ai[1].score1+ai[2].score1+ai[3].score1+ai[4].score1)/5.0;
ar[1]=(ai[0].score2+ai[1].score2+ai[2].score2+ai[3].score2+ai[4].score2)/5.0;
ar[2]=(ai[0].score3+ai[1].score3+ai[2].score3+ai[3].score3+ai[4].score3)/5.0;
printf("三科的平均分是:%6.1f %6.1f %6.1f\n",ar[0],ar[1],ar[2]);
qsort(ai,5,sizeof(stu),compare);
for(i=0;i<5;i++)
{
printf("%7d%12s%6.1f%6.1f%6.1f%6.1f\n",ai[i].num,ai[i].name,ai[i].score1,ai[i].score2,ai[i].score3,ai[i].score1+ai[i].score2+ai[i].score3);
}
qsort(ai,5,sizeof(stu),compare2);
printf("单科1最好的是%12s同学:\n%7d%12s%6.1f%6.1f%6.1f\n",ai[4].name,ai[4].num,ai[4].name,ai[4].score1,ai[4].score2,ai[4].score3);
qsort(ai,5,sizeof(stu),compare3);
printf("单科2最好的是%12s同学:\n%7d%12s%6.1f%6.1f%6.1f\n",ai[4].name,ai[4].num,ai[4].name,ai[4].score1,ai[4].score2,ai[4].score3);
qsort(ai,5,sizeof(stu),compare4);
printf("单科3最好的是%12s同学:\n%7d%12s%6.1f%6.1f%6.1f\n",ai[4].name,ai[4].num,ai[4].name,ai[4].score1,ai[4].score2,ai[4].score3);
qsort(ai,5,sizeof(stu),compare5);
printf("按总分排列为:\n");
for(i=0;i<5;i++)
{
printf("%7d%12s%6.1f%6.1f%6.1f%6.1f\n",ai[i].num,ai[i].name,ai[i].score1,ai[i].score2,ai[i].score3,ai[i].score1+ai[i].score2+ai[i].score3);
}
system("pause");
return 0;
}
输出结果