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

# 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");
}
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Python 学生类代码,包含输入学生信息与三科成绩的操作以及计算平均分总分排序输出的操作。 ```python class Student: def __init__(self): self.name = input("请输入学生姓名:") self.id = input("请输入学生学号:") self.score1 = float(input("请输入第一科成绩:")) # 第一科成绩 self.score2 = float(input("请输入第二科成绩:")) # 第二科成绩 self.score3 = float(input("请输入第三科成绩:")) # 第三科成绩 # 计算平均分 def avg_score(self): return (self.score1 + self.score2 + self.score3) / 3 # 计算总分 def total_score(self): return self.score1 + self.score2 + self.score3 # 输出学生信息与平均分总分 def info(self): print("姓名:", self.name) print("学号:", self.id) print("第一科成绩:", self.score1) print("第二科成绩:", self.score2) print("第三科成绩:", self.score3) print("平均分:", self.avg_score()) print("总分:", self.total_score()) # 输入多个学生信息并存储到列表中 students = [] while True: s = Student() students.append(s) flag = input("是否继续输入?(y/n)") if flag == "n": break # 按照总分从高到低排序输出学生信息 students.sort(key=lambda x: x.total_score(), reverse=True) for s in students: s.info() ``` 这段代码中,我们首先定义了一个 `Student` 类,该类包含了学生姓名、学号以及三科成绩的属性,并且实现了计算平均分、总分输出学生信息的方法。接着,我们使用一个循环输入多个学生的信息,并将其存储在一个列表中。最后,我们按照总分从高到低排序,并输出每个学生的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值