结构体与共同体——成绩排名

麻烦帮我看见哪里有问题,我一直找不出来,有的测试点一直过不了

定义结构体struct stu,编写成绩排名函数:void sort(struct stu *ps,int n),对结构体数组按成绩排名。 程序功能为读入整数N(N<100),再读入N个学生的学号(整型)和成绩(实数)。按样例输出排名。

输出格式:

第一列是名次,注意并列情况;第二列是学号,第三列是成绩(2位小数)。
输入样例:

5
101 99
102 100
103 50
104 80
105 99
输出样例:

1 102 100.00
2 101 99.00
2 105 99.00
4 104 80.00
5 103 50.00


#include <stdio.h>
struct stu
{
  int num;
  double grade;
};
void sort(struct stu *ps,int n)
{
   int i,j,t,m;
   for(i=0;i<n;i++){
       scanf("%d %lf",&ps[i].num,&ps[i].grade);
   }
   for(i=0;i<n;i++){
       for(j=i;j<n-i-1;j++){
           if(ps[j].grade<ps[j+1].grade){
              t=ps[j].grade;
              ps[j].grade=ps[j+1].grade;
              ps[j+1].grade=t;
              m=ps[j].num;
              ps[j].num=ps[j+1].num;
              ps[j+1].num=m;
           }
       }
   }
   int k=1,p=1;
   for(i=0;i<n;i++){
        if(ps[i-1].grade!=ps[i].grade){
            printf("%d %d %.2f\n",p,ps[i].num,ps[i].grade);
            k=p;
            p++;
        }else{
            printf("%d %d %.2f\n",k,ps[i].num,ps[i].grade);
            p++;
        }
   }
}
int main()
{
    int n;
    scanf("%d",&n);
    struct stu p[100];
    sort(p,n);
    return 0;
}

冒泡排序第二个循环应该是j从0开始,j<n-1 ,

int i,j,t,m;
for(i=0;i<n;i++){
scanf("%d %lf",&ps[i].num,&ps[i].grade);
}//这个大话号错了,用中文的了,其他没问题,测试可得样例结果
测试点过不了是超时还是数据错误?

img


void sort(struct stu *ps,int n)
{
    int i,j,t,m;
    struct stu tmp;

    for(i=0; i<n; i++)
        scanf("%d %lf",&ps[i].num,&ps[i].grade);

    for(i=0; i<n-1; i++)    //for(i=0; i<n; i++)
    {
        for(j=i; j<n; j++)    //for(j=i; j<n-i-1; j++)
        {
            if(ps[i].grade < ps[j].grade)    //if(ps[j].grade<ps[j+1].grade)
            {
                tmp=ps[j];
                ps[j]=ps[i];
                ps[i]=tmp;
            }
        }
    }
    for(i=0; i<n; i++)
        printf("%d %d %.2lf\n",i+1,ps[i].num,ps[i].grade);//%.2lf
}

编译错误了