急急急!!c语言里的结构体对一个元素排序怎么让其他元素一起按排序后的结果输出
答案:4 悬赏:80 手机版
解决时间 2021-11-26 00:28
- 提问者网友:缘字诀
- 2021-11-25 17:26
急急急!!c语言里的结构体对一个元素排序怎么让其他元素一起按排序后的结果输出
最佳答案
- 五星知识达人网友:佘樂
- 2021-11-25 18:31
#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);
}
}
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);
}
}
全部回答
- 1楼网友:末日狂欢
- 2021-11-25 21:01
引用洛雨曦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
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里取地址你这是??
- 2楼网友:舍身薄凉客
- 2021-11-25 20:15
#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++的话还有更简单的方法!至于说放到你的程序里,会报错,那就应该是你的程序那里有问题了!下面贴的是我电脑上的运行结果!你再看看你的程序!是不是哪里写错了或者怎么了!
#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++的话还有更简单的方法!至于说放到你的程序里,会报错,那就应该是你的程序那里有问题了!下面贴的是我电脑上的运行结果!你再看看你的程序!是不是哪里写错了或者怎么了!
- 3楼网友:执傲
- 2021-11-25 19:05
喏 拿学号来举例吧
设置一个二维数组a[5][4] 每行录入一个人的各项数据 然后按照学号所在的a[N][0]元素进行行排序
简单来说 就是按照一维数组对这5行每行的首元素也就是学号进行排序 在置换元素的时候把同行的其余三个元素随首元素一起置换
换成a[N][1]神马的科目成绩排序也是一个道理
再不懂可以再问我 代码就不给你写了 不然体会不到写代码的乐趣 伸手党会脑萎缩的、
设置一个二维数组a[5][4] 每行录入一个人的各项数据 然后按照学号所在的a[N][0]元素进行行排序
简单来说 就是按照一维数组对这5行每行的首元素也就是学号进行排序 在置换元素的时候把同行的其余三个元素随首元素一起置换
换成a[N][1]神马的科目成绩排序也是一个道理
再不懂可以再问我 代码就不给你写了 不然体会不到写代码的乐趣 伸手党会脑萎缩的、
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯