今天学习当中,在编写结构体程序时发生了一件很搞笑的事。
输入五个同学的姓名、三科成绩、与平均分。按照平均分进行大小排序输出
第一次使用这样的代码
#include<stdio.h>
int 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("%f\n",stu[i].d);
}
}
输入结果是这样的
这个是在这几行
仅仅交换的是平均值???!!
我们要通过以平均成绩为基础,对整个结构体进行排序
正确代码
#include<stdio.h>
int 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("%f\n",stu[i].d);
}
}
这样结果才正确
这样才是进行结构体整体排序
关键在于创造一个“结构体”类型的“temp"
然后根据判定条件通过对整个结构进行交换排序