急急急!!c语言里的结构体对一个元素排序怎么让其他元素一起按排序后的结果输出

例如:
......
int i;
for(i=0;i<5;i++)
scanf("%d,%d,%d,%d",&number,&chinese,&math,&english);
.......
就是5个人的学号和各科成绩,对一科成绩排序,让其他数据也随着一起改变顺序
尽可能详细一点 跪谢高手的帮助啊

#include<stdio.h>
struct student{//定义结构体
int number;
int chinese;
int math;
int endlish;
}stu[5];//定义结构体数组
main()
{
struct student k;//定义结构体变量

int i,j;
for(i=0;i<5;i++)//输入5个学生的学号、语文、数学、英语成绩
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%d,%d,%d,%d",&stu[i].number,&stu[i].chinese,&stu[i].math,&stu[i].endlish);
}
for(i=0;i<4;i++)//利用冒泡从大到小排序
for(j=0;j<4-i;j++)
if(stu[i].math<stu[j].math)
{
k=stu[i];
stu[i]=stu[j];
stu[j]=k;}
for(i=0;i<5;i++)//输出排序后的5个学生的学号、语文、数学、英语成绩
{
printf("请输入第%d个学生的信息:",i+1);
printf("%d,%d,%d,%d\n",&stu[i].number,&stu[i].chinese,&stu[i].math,&stu[i].endlish);
}

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-07
喏 拿学号来举例吧

设置一个二维数组a[5][4] 每行录入一个人的各项数据 然后按照学号所在的a[N][0]元素进行行排序
简单来说 就是按照一维数组对这5行每行的首元素也就是学号进行排序 在置换元素的时候把同行的其余三个元素随首元素一起置换
换成a[N][1]神马的科目成绩排序也是一个道理
再不懂可以再问我 代码就不给你写了 不然体会不到写代码的乐趣 伸手党会脑萎缩的、本回答被网友采纳
第2个回答  2012-07-07
#include<stdio.h>
#include<stdlib.h>
typedef struct stu
{
int number;
int english,chinese,math;
}Stu;
int cmp_1(const void* a,const void* b)
{
return ((Stu*)b)->english - ((Stu*)a)->english;
}
int cmp_2(const void* a,const void* b)
{
return ((Stu*)b)->chinese - ((Stu*)a)->chinese;
}
int cmp_3(const void* a,const void* b)
{
return ((Stu*)b)->math - ((Stu*)a)->math;
}
int main()
{
Stu a[5];
int i;
printf("number chinese math english\n");
for(i = 0;i < 5;i++)
scanf("%d %d %d %d",&a[i].number,&a[i].chinese,&a[i].math,&a[i].english);
qsort(a,5,sizeof(Stu),cmp_1);
printf("After sorting based on english\n");
printf("number chinese math english\n");
for(i = 0;i < 5;i++)
printf("%d %d %d %d\n",a[i].number,a[i].chinese,a[i].math,a[i].english);
qsort(a,5,sizeof(Stu),cmp_2);
printf("After sorting based on chinese\n");
printf("number chinese math english\n");
for(i = 0;i < 5;i++)
printf("%d %d %d %d\n",a[i].number,a[i].chinese,a[i].math,a[i].english);
qsort(a,5,sizeof(Stu),cmp_3);
printf("After sorting based on math\n");
printf("number chinese math english\n");
for(i = 0;i < 5;i++)
printf("%d %d %d %d\n",a[i].number,a[i].chinese,a[i].math,a[i].english);
return 0;
}

number chinese math english
1001 100 90 80
1002 90 80 90
1003 90 89 88
1004 98 99 78
1005 97 96 78
After sorting based on english
number chinese math english
1002 90 80 90
1003 90 89 88
1001 100 90 80
1005 97 96 78
1004 98 99 78
After sorting based on chinese
number chinese math english
1001 100 90 80
1004 98 99 78
1005 97 96 78
1003 90 89 88
1002 90 80 90
After sorting based on math
number chinese math english
1004 98 99 78
1005 97 96 78
1001 100 90 80
1003 90 89 88
1002 90 80 90
请按任意键继续. . .追问

int cmp_1(const void* a,const void* b)
{
return ((Stu*)b)->english - ((Stu*)a)->english;
}
int cmp_2(const void* a,const void* b)
}
这一部分放在我的程序里
return ((Stu*)b)->english - ((Stu*)a)->english;
提示error C2059: syntax error : ')'
这是为什么(我用的vc++6.0,但学的是vc,不是vc++)
代码整个考进去可以,但是放在我的程序里不行

追答

我用VS2010可以的,用的是C语言,用C++的话还有更简单的方法!至于说放到你的程序里,会报错,那就应该是你的程序那里有问题了!下面贴的是我电脑上的运行结果!你再看看你的程序!是不是哪里写错了或者怎么了!

第3个回答  2017-12-12
冒泡貌似有点问题
还有printf里取地址你这是??
相似回答