有一组n名学生数据,n由用户输入,每个数据中含有四门课成绩,请按成绩总和从高到低对这组数据进行排序。 编写函数calc求出每名学生的总分。 编写函数sort按每名学生的总分从高到低对这组数据进行排序。
函数接口定义:
void calc(struct student *p,int n);
void sort(struct student *p,int n);
其中 p 和 n 都是用户传入的参数。 函数calc求出p指针所指向的结构体数组中 n 名学生各自的总分。 函数sort对p指针所指向的结构体数组的学生数据按总分降序排序
裁判测试程序样例:
#include <stdio.h>
#define N 30
struct student
{
int num;
char name[10];
float score[4];
float sum;
};
void calc(struct student *p,int n);
void sort(struct student *p,int n);
int main()
{
struct student stu[N];
int i,j,n;
float f;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%s",&stu[i].num,stu[i].name);
for(j=0;j<4;j++)
{
scanf("%f",&f);
stu[i].score[j]=f;
}
}
calc(stu,n);
sort(stu,n);
for(i=0;i<n;i++)
{
printf("%5d%10s",stu[i].num,stu[i].name);
printf("%5.1f%5.1f%5.1f%5.1f%7.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3],stu[i].sum);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
第一行输入学生人数n,第二行开始输入n名学生的学号、姓名和四门课成绩,每名学生占一行
4
101 zhang 67 68 75 80
102 chen 89 75 90 76
103 li 88 88 88 88
104 sun 90 90 98 90
结尾无空行
输出样例:
输出n行数据,按照学生总分递减排序,每名学生占一行
104 sun 90.0 90.0 98.0 90.0 368.0
103 li 88.0 88.0 88.0 88.0 352.0
102 chen 89.0 75.0 90.0 76.0 330.0
101 zhang 67.0 68.0 75.0 80.0 290.0
结尾无空行
//pta 上运行无误
void calc(struct student *p,int n)
{
int i;
for(i=0;i<n;i++)
{
for(int j=0;j<4;j++)
{
(p+i)->sum+=(p+i)->score[j];
}
}
}
void sort(struct student *p,int n)
{
int i=0,k=0,j=0,temp=0;
float a[4];
char name[10];
for(int i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(p[j].sum < p[j+1].sum)
{
temp=p[j].sum;
p[j].sum=p[j+1].sum;
p[j+1].sum=temp;
k=p[j].num;
p[j].num=p[j+1].num;
p[j+1].num=k;
strcpy(name,p[j].name);
strcpy(p[j].name,p[j+1].name);
strcpy(p[j+1].name,name);
a[0]=p[j].score[0];
a[1]=p[j].score[1];
a[2]=p[j].score[2];
a[3]=p[j].score[3];
p[j].score[0]=p[j+1].score[0];
p[j].score[1]=p[j+1].score[1];
p[j].score[2]=p[j+1].score[2];
p[j].score[3]=p[j+1].score[3];
p[j+1].score[0]=a[0];
p[j+1].score[1]=a[1];
p[j+1].score[2]=a[2];
p[j+1].score[3]=a[3];
//tan zi peng wu di
}
}
}
}