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");
}
}
}
# 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");
}
}
}
相关文章推荐
- 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据
- 根据类Student的定义,创建五个该类的对象,输出每个学生的信息, 计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。
- Student类,包括学生姓名、性别、年龄、Java成绩。要求创建五个该类对象,输出每个学生信息,计算并输出这五个学生Java成绩的平均值, 以及计算并输出他们Ja
- 综合排序 学生信息输入并排序 键盘录入信息 (姓名,语文成绩,数学成绩,英语成绩),按总分高到低输出
- 习题 9.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
- 有a个学生,每个学生有b门课程的成绩。要求用户输入学生序号以后,能输出该学生的全部成绩用指针函数来实现
- 第十七周项目六 学生成绩统计-输出学生信息、总分和均分
- 问题二十六: 输入3个学生3门课的成绩,计算每个学生的总分和平均分成绩。(用数组)
- 例 8.25 有a个学生,每个学生有b门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。
- 编写一个函数print,打印一个学生的成绩数组,该书组中有五个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score(3门课的成绩)、用主函数输入这些数据,用print函数输出这些
- java输入学生信息,按总分成绩由高到低排列,输出到文件中
- 编写程序,提示用户输入5个学生的5门课程的成绩,然后计算每个学生的总分和
- 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
- C++ 入门题现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。然后输出
- 学校有多个班级,有语数外多门成绩,按照成绩排序后,找出每个班级语文成绩前五名学生
- 问题二十七:输入3个学生3门课的成绩,计算每个学生的总分和平均分成绩。(用while循环)
- 要求可以根据每个学生的成绩进行由高到低的排序如果成绩相等则按照年龄由低到高排序数据的样式如下张三:19:90|李四:20:90|王五:20:80|赵六:21:100
- PHP之键盘输入四个学生的学号 姓名 语文 数学 英语信息 ,计算出每个学生的平均成绩,输出
- 输出平均成绩最高的学生成绩以及该学生的序号
- 用C语言编写一个双链表,每个结点存储学生的编号以及姓名,遍历这个双链表,并将学号按照从小到大进行排序