PTA关于单科成绩排序(学生信息的那些操作)(C语言)
#include <stdio.h>
#include <string.h>
struct student{
long long id;
char name[1000];
int score[3];
};
int main()
{
int n,i=0,max=0,j=0,m=0,s,k=0,flag=0;
struct student qw[110],t;
int sum[110];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lld %s %d %d %d",&qw[i].id,qw[i].name,&qw[i].score[0],&qw[i].score[1],&qw[i].score[2]);
}
scanf("%d",&s);//定义后续输出的整数
for(j=0;j<n;j++)
{
for(k=j+1;k<n;k++)
{
if(qw[j].score[s-1]<qw[k].score[s-1])//s-1是因为数组从0开始
{
t=qw[j];
qw[j]=qw[k];
qw[k]=t;//结构体定义t,便于交换所有信息
}
}
}
for(m=0;m<n;m++)
{
printf("%lld %s %d %d %d \n",qw[m].id,qw[m].name,qw[m].score[0],qw[m].score[1],qw[m].score[2]);
}
return 0;
}
总成绩排序
#include <stdio.h>
#include <string.h>
struct student{
long long id;
char name[1000];
int score[3];
};
int main()
{
int n,i=0,j=0,m=0,k=0,s=0;
struct student qw[110],t;
int sum[110];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%lld %s %d %d %d",&qw[i].id,qw[i].name,&qw[i].score[0],&qw[i].score[1],&qw[i].score[2]);
sum[i]=qw[i].score[0]+qw[i].score[1]+qw[i].score[2];
}
for(j=0;j<n;j++)
{
for(k=j+1;k<n;k++)//冒泡排序,实现排序
{
if(sum[j]<sum[k])
{
s=sum[j];
sum[j]=sum[k];
sum[k]=s;//实现总成绩交换
t=qw[j];
qw[j]=qw[k];
qw[k]=t;//实现其他学生信息交换
}
if(sum[j]==sum[k]&&strcmp(qw[j].name,qw[k].name)>0)//strcmp函数实现姓名升序排序
{
t=qw[j];
qw[j]=qw[k];
qw[k]=t;//再次进行交换
}
}
}
for(m=0;m<n;m++)
{
printf("%lld %s %d %d %d %d\n",qw[m].id,qw[m].name,qw[m].score[0],qw[m].score[1],qw[m].score[2],sum[m]);
}
return 0;
}