`include
struct struct_name
{
char name[20];
char num[20];
float score;
}student[3];
void sort(struct struct_name *p)
{ struct struct_name temp,*p1; int i, j;
printf("lololololol");
for(i=0;i for(j=0;j if(p->score<(p+1)->score){
temp=*p;
*p=*p1;
*p1=temp;
}
p++;
}
}
}
int main()
{
struct_name student [3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
sort(student);
int i;
for(i=0;i<3;i++){
printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
}
return 0;
}
排序算法有很多种类,如桶排序,冒泡排序等等,建议可以看一下相关的算法。
你的问题不是在于排序,而是对 student这种结构无法进行排序。
这种情况,你可以对比score的值,对name,num进行交换即可。
比如再排序的过程中要交换score了,同时对name,num进行交换。例如
`char name_tmp[32];
char num_tmp[32];
float score_tmp;
if(p->socre > (p+1)->score)
{
// 交换name
strcpy(name_tmp,p->name);
memset(p->name,0,sizeof(p->name)); //清空原先的名字
strcpy(p->name,(p+1)->name);
memset((p+1)->name,0,sizeof((p+1)->name));
strcpy((p+1)->name,name_tmp);
//交换num
strcpy(num_tmp,p->num);
memset(p->num,0,sizeof(p->num)); //清空原先的num
strcpy(p->num,(p+1)->num);
memset((p+1)->num,0,sizeof((p+1)->num));
strcpy((p+1)->num,num_tmp);
//交换score
score_tmp = p->score;
p->score = (p+1)->score;
(p+1)->score = score_tmp;
}
这样,就搞定了所有要交换的东西了。
for(i=0;i for(j=0;j if(p->score<(p+1)->score){
什么乱七八糟的
直接给你代码吧(排序的时候我用了冒泡法)
#include <stdio.h>
#include <stdlib.h>
struct struct_name
{
char name[20];
char num[20];
float score;
}student[3];
void sort(struct struct_name *p)
{
struct struct_name temp;
for(int j=0;j<2;j++)
for(int i=0;i<2-j;i++)
if((p+i)->score<(p+i+1)->score)
{
temp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=temp;
}
}
int main()
{
struct struct_name student[3]={{"Tom","15",97.2},{"Boy","16",98.1},{"Smith","18",99.0}};
sort(student);
int i;
for(i=0;i<3;i++)
{
printf("姓名:%s\n学号:%s\n成绩:%.1f\n",student[i].name,student[i].num,student[i].score);
}
return 0;
}
运行结果:
姓名:Smith
学号:18
成绩:99.0
姓名:Boy
学号:16
成绩:98.1
姓名:Tom
学号:15
成绩:97.2