永发信息网

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

答案:4  悬赏:80  手机版
解决时间 2021-11-26 00:28
急急急!!c语言里的结构体对一个元素排序怎么让其他元素一起按排序后的结果输出
最佳答案
#include
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 {
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);
}

}
全部回答
引用洛雨曦1125的回答:
#include
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 {
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);
}

}冒泡貌似有点问题
还有printf里取地址你这是??
#include
#include
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++的话还有更简单的方法!至于说放到你的程序里,会报错,那就应该是你的程序那里有问题了!下面贴的是我电脑上的运行结果!你再看看你的程序!是不是哪里写错了或者怎么了!
喏 拿学号来举例吧

设置一个二维数组a[5][4] 每行录入一个人的各项数据 然后按照学号所在的a[N][0]元素进行行排序
简单来说 就是按照一维数组对这5行每行的首元素也就是学号进行排序 在置换元素的时候把同行的其余三个元素随首元素一起置换
换成a[N][1]神马的科目成绩排序也是一个道理
再不懂可以再问我 代码就不给你写了 不然体会不到写代码的乐趣 伸手党会脑萎缩的、
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
合肥爱行网络科技有限公司怎么样?
人,不是活的怎么样,而是怎么去活
我也不知道为什么 一进来就看见常
睁眼撞鬼txt下载微盘
专业的毕业生超过10万人,还有哪些专业竞争非
配料,米粉,根霉菌是做什么用的
是乐观的人吗
我在福建省莆田市荔城区黄石镇鑫和地王广场小
怎样向顾客介绍欧货服装?
请教桢楠树和润楠树的区别
南无八部天龙广力菩萨的介绍
毛俊杰多大年龄
联想A560e可以连上电脑,但连不上360手机助理
福田区香梅北景田北七街是哪个派出所
狼吃草作文
推荐资讯
大黄炭怎么制造
为什么用ulead cool3d整体特效中素材中都有 u
鹤壁哪有夜市
□5△这个三位数同时是2、3、5的倍数,可填什
三个月的格力犬身高身长是多少
内蒙的粉汤怎么做
广西灌阳县黑帮老大是谁?
黄壳5W-30和10W-40哪个好?
诗经·采薇是一首什么诗,写了远征战士归乡途
树上柿子怕冻吗
北京渔海网络科技有限公司怎么样?
中国移动(七六路陈氏指定营业厅)地址在什么地
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?