Description 有5个学生,每个学生的数据包括:学号、姓名、三门课成绩,编写程序要求从键盘输入学生们的数据,并输出成绩报表(包括每人的学号,姓名、三门成绩及平均分数),还要求输出平均分在前3名的学生姓名及平均成绩。 Input 输入仅五行,输入5个学生的学号、姓名、三门课成绩,要求数据之间用空格分开 Output 输出仅八行,输出5行的成绩报表(依原来顺序的成绩榜,包括:学号 姓名 三门课成绩 平均分),输出3行的成绩榜(平均成绩最高的三个学生的倒序成绩榜,包括:学号 姓名 三门课成绩 平均分) Sample Input 01 Li 56 78 67 02 Wang 78 77 60 03 Cheng 88 90 93 04 Jiang 77 99 89 05 Zhao 85 89 96 Sample Output 1 Li 56.00 78.00 67.00 67.00 2 Wang 78.00 77.00 60.00 71.67 3 Cheng 88.00 90.00 93.00 90.33 4 Jiang 77.00 99.00 89.00 88.33 5 Zhao 85.00 89.00 96.00 90.00 3 Cheng 88.00 90.00 93.00 90.33 5 Zhao 85.00 89.00 96.00 90.00 4 Jiang 77.00 99.00 89.00 88.33 Source |
方法一(结构体+数组):
#include <stdio.h>
struct st
{
int num;
char name[20];
float score[3];
float ave;
};
int main()
{
struct st stu[20];
struct st stut;
int i,j;
for ( i = 0; i <5; i++)
{
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
for ( i = 0; i <5; i++)
{
stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}
for ( i = 0; i <5; i++)
{
printf("%d %s %.2f %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
for ( i = 0; i < 4; i++)
{
for ( j = 4; j>0; j--)
{
if (stu[j].ave>stu[j-1].ave)
{
stut=stu[j-1];
stu[j-1]=stu[j];
stu[j]=stut;
}
}
}
for ( i = 0; i <3; i++)
{
printf("%d %s %.2f %.2f %.2f %.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
}
system("pause");
return 0;
}
方法二(结构体+指针):
#include <stdio.h>
struct st
{
int num;
char name[10];
float score[3];
float ave;
};
int main()
{
struct st stu[5];
struct st stut;
struct st *p;
int i;
for ( p = stu; p < stu+5; p++)
{
scanf("%d%s%f%f%f",&(*p).num,(*p).name,&(*p).score[0],&(*p).score[1],&(*p).score[2]);
}
for ( p = stu; p < stu+5; p++)
{
(*p).ave=((*p).score[0]+(*p).score[1]+(*p).score[2])/3.;
}
for ( p = stu; p < stu+5; p++)
{
printf("%d %s %.2f %.2f %.2f %.2f\n",(*p).num,(*p).name,(*p).score[0],(*p).score[1],(*p).score[2],(*p).ave);
}
for ( i =0; i < 4; i++)
{
for ( p =stu+4 ; p >stu; p--)
{
if ((*p).ave>(*(p-1)).ave)
{
stut=*(p-1);
*(p-1)=*p;
*p=stut;
}
}
}
for ( p = stu; p < stu+3; p++)
{
printf("%d %s %.2f %.2f %.2f %.2f\n",(*p).num,(*p).name,(*p).score[0],(*p).score[1],(*p).score[2],(*p).ave);
}
system("pause");
return 0;
}