求各位高手帮忙,我在弄一个排序问题。
因为做课程设计在写一个学生成绩管理程序,现在一个排序问题总是搞不定。现在出现的问题是一次不能彻底的把成绩从高到低排出来,得排好几次才行,我实在不知道是为什么,求各位高手帮帮忙。现在把排序的函数单独调出来,麻烦您看看。#include<stdio.h>
#define N 100
struct student
{
int num;
char name[20];
char sex;
int c;
int object_c;
int java;
};
struct student stu[N]={{11,"aa",'w',59,98,49},{12,"bb",'w',62,95,78},{13,"cc",'w',70,80,50},{14,"dd",'w',77,82,79},{15,"ee",'w',87,83,67},{16,"ff",'w',90,79,80}};
int num_rec=5;
void score_chart1(int a[])
{
struct student t;
int i,j;
for(i=0;i<num_rec-1;i++)
{
for(j=i+1;j<num_rec;j++)
{
if(a[i]<a[j])
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
}
}
}
void main()
{
int i,ch,a[N],yz=1;
printf("\n\t\t1.根据C成绩排名;\n");
printf("\t\t2.根据Object_C成绩排名;\n");
printf("\t\t3.根据Java成绩排名;\n");
printf("\t\t4.根据学号排名;\n");
printf("\t\t0.返回主菜单.\n");
printf("\t\t请选择排名方式:");
scanf("%d",&ch);
switch(ch)
{
case 1 :
for(i=0;i<num_rec;i++)
a[i]=stu[i].c;
score_chart1(a);
yz=0;
break;
case 2 :
for(i=0;i<num_rec;i++)
a[i]=stu[i].object_c;
score_chart1(a);
yz=0;
break;
case 3 :
for(i=0;i<num_rec;i++)
a[i]=stu[i].java;
score_chart1(a);
yz=0;
break;
case 4 :
for(i=0;i<num_rec;i++)
a[i]=stu[i].num;
score_chart1(a);
yz=0;
break;
case 0 :
printf("\n\t\t返回主菜单成功,");
break;
default :
printf("\t\t输入错误,请重新输入.\n");
break;
}
if(yz==0)
{
printf("Number\tName\tsex\tC\tObject_c\tJava\n");
for(i=0;i<num_rec;i++)
{
printf("%02d\t%s\t%c\t%d\t%d\t\t%d\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].c,stu[i].object_c,stu[i].java);
}
}
}
现在这个程序在选择3时运行出来的结果也是不对的,求解。谢谢。