#include
#include
struct STUDENT
{
char a[100];
int b;
int c;
};
int main()
{
int n,i,j,t;
struct STUDENT S[1000];
struct STUDENT axi;
memset(S,0,1000);
scanf("%d",&n);
for(i=0;i"%s %d %d",&S[i].a,&S[i].b,&S[i].c);
for(i=0;i0;j-1-i;j++)
{
if(S[j].c>S[j+1].c||(S[j].c==S[j+1].c&&S[j].a[0]>S[j+1].a[0])||(S[j].c==S[j+1].c&&S[j].a[0]==S[j+1].a[0]&&S[j].b>S[j+1].b))
{
axi=S[j];
S[j]=S[j+1];
S[j+1]=axi;
}
}
for(i=0;i"%s %d %d\n",S[i].a,S[i].b,S[i].c);
return 0;
}
字符串比较用strcmp
你的条件写得眼花缭乱的,分开来写
伪代码:
int needswp = 0;
if (成绩1>成绩2)needswp =1
if (成绩1==成绩2 && 姓名1>姓名2) needswp =1
if(needswp) 交换
这if语句里面逻辑有点乱,自己慢慢根据题目需求,先进行成绩的高低顺序排序,然后在成绩相同的情况进行名字字符排序,只有成绩和姓名都相同再进行年龄排序。