有一个学生结构体,其数据成员有: 学号, 姓名, 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;

}

输出结果