今天学习当中,在编写结构体程序时发生了一件很搞笑的事。
输入五个同学的姓名、三科成绩、与平均分。按照平均分进行大小排序输出
第一次使用这样的代码
#includeint main() { struct student { char n[100]; int a; int b; int c; float d; }stu[5]; for(int i=0;i<5;i++) { scanf("%s",stu[i].n); scanf("%d",&stu[i].a); scanf("%d",&stu[i].b); scanf("%d",&stu[i].c); stu[i].d=(stu[i].a+stu[i].b+stu[i].c)*1.0/3; } int temp; for(int i=0;i<5;i++) { for(int j=i+1;j<5;j++) { if(stu[i].d>stu[j].d) { temp=stu[i].d; stu[i].d=stu[j].d; stu[j].d=temp; } } } printf("n"); for(int i=0;i<5;i++) { printf("%s ",stu[i].n); printf("%fn",stu[i].d); } }
输入结果是这样的
这个是在这几行
仅仅交换的是平均值???!!
我们要通过以平均成绩为基础,对整个结构体进行排序
正确代码
#includeint main() { struct student { char n[100]; int a; int b; int c; float d; }stu[5]; for(int i=0;i<5;i++) { scanf("%s",stu[i].n); scanf("%d",&stu[i].a); scanf("%d",&stu[i].b); scanf("%d",&stu[i].c); stu[i].d=(stu[i].a+stu[i].b+stu[i].c)*1.0/3; } struct student temp;//创造一个“结构体”类型的“temp" for(int i=0;i<5;i++) { for(int j=i+1;j<5;j++) { if(stu[i].d>stu[j].d) { temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } } printf("n"); for(int i=0;i<5;i++) { printf("%s ",stu[i].n); printf("%fn",stu[i].d); } }
这样结果才正确
这样才是进行结构体整体排序
关键在于创造一个“结构体”类型的“temp"
然后根据判定条件通过对整个结构进行交换排序



