求助 一个学生成绩 排名的程序
学习成绩排名。有M个班的学生参加某门课程的考试,每个班级最多有N个学生。基本要求:1)每个班的学生记录按学号顺序排列,每个学生纪录包括排列名次、学号和成绩;
2)输入某个学生的学号,输出其在本班的排名情况,具有相同成绩的名次相同;
3)输出全体考生的排名情况。
测试数据:
假定有7个班,每个班级学生人数为12人,学号=班号+学生在本班中的序号,班号依次为1,2,…,7;成绩是由计算机随机产生的50至100之间的整数。
#include<stdio.h>
#include<string.h>
#define C 7;
#define N 12;
struct student
{int id;
int score;
int crang;
int rang;
}stu ;
struct cs
{int x;
struct student stu[];
}clas[C];
void id()
{int i,j;
for(i=0;i<7;i++)
{clas[i].x=i+1;
for(j=0;j<12;j++)
clas[i].stu[j].id=j+1;
}
}
void getscore()
{int i,j;
for(i=1;i<8;i++)
for(j=1;j<13;j++)
{printf("请输入%d%d的成绩:\n",i,j);
scanf("%d",&clas[i].stu[j].score);
while((clas[i].stu[j].score<50||clas[i].stu[j].score>100)==1)
{
printf("请重新输入%d%d的成绩:\n",i,j);
scanf("%d",&clas[i].stu[j].score);}
}
void cran()
{int i,j,l,k;
for(i=1;i<8;i++)
{
struct cs t[i];
for(j=1;j<12;j++)
{
l=j;
for(k=j+1;k<13;k++)
if(clas[i].stu[k].score>clas[i].stu[l].score)
l=k;
t[i]=clas[i].stu[l];clas[i].stu[l]=clas[i].stu[k];clas[i].stu[k]=t[i];
}
}
for(i=1;i<8;i++)
for(j=1;j<13;j++)
clas[i].stu[j].crang=j;
printf("请输入学号:\n");
scanf("%d%j",&i,&j);
printf("%d%d在班级中的排名是%d",clas[i].stu[j].crang);
}
void main()
{id();
getscore();
cran();}