in:
3
zhangsan 80 75 65
lisi 65 52 56
wangwu 87 86 95
输出:
wangwu 87 86 95 89.33
zhangsan 80 75 65 73.33
lisi 65 52 56 57.67
#include <stdio.h>
#include<string.h>
typedef struct //定义结构
{
char name[10];
int a;
int b;
int c;
double avg;
} student; //命名结构
int main()
{ //char temp1;
int n, i,j,temp2;
while(scanf("%d",&n) != -1) //处理到文件尾的输入方式
{
student stu[n]; //定义一个结构类型的数组
for(i = 0; i < n; i++)
{
scanf("%s %d %d %d",stu[i].name, &stu[i].a,&stu[i].b,&stu[i].c);
stu[i].avg = (stu[i].a+stu[i].b+stu[i].c)/3.0; //求平均数
}
for(i=0;i<n;i++)//使用双层循环,对名字进行排序
{
for(j=0;j<n-i;j++)
{
if(stu[j].avg>stu[j+1].avg)//如果前者大于后者,两者进行交换,同时对应成绩也进行交换
{
temp1=stu[j].name;
stu[j].name=stu[j+1].name;
stu[j+1].name=temp1;
temp2=stu[j].avg;
stu[j].avg=stu[j+1].avg;
stu[j+1].avg=temp2;
}
}
printf("%s %d %d %d %.2lf\n",stu[i].name, stu[i].a,stu[i].b,stu[i].c,stu[j].avg);
}
}
return 0;
}
修改见注释,供参考:
#include <stdio.h>
#include<string.h>
typedef struct//定义结构
{
char name[10];
int a;
int b;
int c;
double avg;
}student;
int main()
{
int n, i, j;
student tmp, stu[10];
while(scanf("%d",&n) == 1 && n != 0)//输入 0 或 ctrl + z 结束
{
for(i = 0; i < n; i++)
{
scanf("%s %d %d %d",stu[i].name, &stu[i].a,&stu[i].b,&stu[i].c);
stu[i].avg = (stu[i].a+stu[i].b+stu[i].c)/3.0; //求平均数
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stu[j].avg < stu[j+1].avg)
{
tmp = stu[j];
stu[j]=stu[j+1];
stu[j+1]=tmp;
}
else if((stu[j].avg == stu[j+1].avg) && (strcmp(stu[j].name,stu[j+1].name) > 0))
{
tmp = stu[j];
stu[j]=stu[j+1];
stu[j+1]=tmp;
}
}
}
for(i=0;i<n;i++)
printf("%s %d %d %d %.2lf\n",stu[i].name, stu[i].a,stu[i].b,stu[i].c,stu[i].avg);
}
return 0;
}
描述一下你遇到的问题吧