答案错误33到底错在哪了

img


输入N个学生的姓名和语文成绩,排出名次,并且输出每个学生的姓名。
#include<stdio.h>
typedef struct student
{
char name[30];
int score;

}STUDENT;
void m(STUDENT stu[],int n)
{
STUDENT stu1;
int i,j,m[60];
for(i=0;i<n;i++)
m[i]=stu[i].score;
for(i=0;i<n-1;i++)
for (j = 1; j < n; j++)
if (m[i] < m[j])
{
stu1 = stu[i];
stu[i] = stu[j];
stu[j] = stu1;
}
}
int main()
{
STUDENT stu[60];
int i,j,n;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", stu[i].name);
scanf("%d", &stu[i].score);
}
m(stu,n);
for (i = 0; i < n; i++)
printf("%d %s %d\n", i + 1, stu[i].name, stu[i].score);

return 0;

}

修改如下,供参考:

#include<stdio.h>
typedef struct student
{
    char name[30];
    int score;
}STUDENT;
void m2(STUDENT stu[], int n)//修改2
{
    STUDENT stu1;
    int i, j, m[60];
    //for (i = 0; i < n; i++)
      //    m[i] = stu[i].score;
    for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++)   //for (j = 1; j < n; j++)
            if (stu[i].score < stu[j].score) //if (m[i] < m[j])
            {
                stu1 = stu[i];
                stu[i] = stu[j];
                stu[j] = stu1;
            }
}
void m(STUDENT stu[], int n)//修改1
{
    STUDENT stu1;
    int i, j, m[60],t;
    for (i = 0; i < n; i++)
        m[i] = stu[i].score;
    for (i = 0; i < n - 1; i++)
        for (j = i + 1; j < n; j++) //for (j = 1; j < n; j++)
            if (m[i] < m[j])
            {
                stu1 = stu[i];
                stu[i] = stu[j];
                stu[j] = stu1;
                t = m[i];       //修改
                m[i] = m[j];    //修改
                m[j] = t;       //修改
            }
}
int main()
{
    STUDENT stu[60];
    int i, j, n;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%s", stu[i].name);
        scanf("%d", &stu[i].score);
    }
    m(stu, n);
    for (i = 0; i < n; i++)
        printf("%d %s %d\n", i + 1, stu[i].name, stu[i].score);

    return 0;
}