您的位置:首页 > 其它

flag28 成绩排序,输出单科最排名以及每个学生每科排名以及总分排名

2018-02-19 16:39 621 查看
# include <stdio.h>
# include <malloc.h>
typedef struct num
{
int data;
int vak;
}Val,*Pval;
typedef struct node
{
int id;
int gread[4];
int rank[4];
int max1;
int max2;
}Node,*Pnode;
void sort(Pnode base,int i,int j,int T);
void xianshi(Pnode base,int j,int k);
void idsort(Pnode base,int T);
void maxn(Pnode base,int T);
void find(Pnode base,int *a,int T);

int main()
{
int T=5;
Pval tmp=(Pval)malloc(sizeof(Val)*T);
Pnode base=(Pnode)malloc(sizeof(Node)*T);
base[0].id=101;
base[1].id=102;
base[2].id=103;
base[3].id=104;
base[4].id=105;
base[0].gread[0]=98+85+88;//为了便于输出 直接赋值 后续可以改成输入文本模式即可 
base[0].gread[1]=98;
base[0].gread[2]=85;
base[0].gread[3]=88;
base[1].gread[0]=70+95+88;
base[1].gread[1]=70;
base[1].gread[2]=95;
base[1].gread[3]=88;
base[2].gread[0]=82+87+94;
base[2].gread[1]=82;
base[2].gread[2]=87;
base[2].gread[3]=94;
base[3].gread[0]=91*3;
base[3].gread[1]=91;
base[3].gread[2]=91;
base[3].gread[3]=91;
base[4].gread[0]=85+90+90;
base[4].gread[1]=85;
base[4].gread[2]=90;
base[4].gread[3]=90;
int a[5]={101,102,103,104,105};
for(int i=0;i<T;i++)
{
sort(base,1,i,T);
if(i<=3)
xianshi(base,0,i);
printf("\n");
}
idsort(base,T);
maxn(base,T);
find(base,a,T);
return 0;
}
void sort(Pnode base,int i,int j,int T)
{
Node tmp;
bool change=true;
for(int k=0;k<T&&change;k++)
{
change=false;
for(int k1=T-1;k1>k;k1--)
{
if(base[k1].gread[j]>base[k1-1].gread[j])
{
tmp=base[k1];
base[k1]=base[k1-1];
base[k1-1]=tmp;
change=true;
}
}
}
base[0].rank[j]=1;
for(int i=1;i<T;i++)
{
if(base[i].gread[j]==base[i-1].gread[j])
{
base[i].rank[j]=base[i-1].rank[j];
}
else 
base[i].rank[j]=i+1;
}
}
void xianshi(Pnode base,int j,int k)
{
for(int i=0;i<5;i++)
printf(" %d ",base[i].gread[k]);
printf("\n");
for(int i=0;i<5;i++)
printf("%d ",base[i].rank[k]);
}
void idsort(Pnode base,int T)
{
Node tmp;
bool change=true;
for(int i=0;i<T&&change;i++)
{
change=false;
for(int k=T-1;k>i;k--)
if(base[k].id<base[k-1].id)
{
tmp=base[k];
base[k]=base[k-1];
base[k-1]=tmp;
change=true;
}
}
}
void maxn(Pnode base,int T)
{
int min1=T+1,min2=-1;
for(int i=0;i<T;i++)
{
for(int j=0;j<4;j++)
{
if(min1>base[i].rank[j])
{
min1=base[i].rank[j];
min2=j;
}
}
base[i].max1=min1;
base[i].max2=min2;
min1=T+1;
min2=-1;
}
}
void find(Pnode base,int *a,int T)
{
char c[4]={'A','C','M','E'};

for(int i=0;i<T;i++)
{
for(int j=0;j<T;j++)
{
if(a[i]==base[j].id)
printf("\n%d%c",base[i].max1,c[base[i].max2]);
}
if(i!=T-1)
{
printf("\n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐