70,024
社区成员




#include<stdio.h>
struct Stu {
char a[10];
char name[10];
int grade1;
int grade2;
int grade3;
int sum;
};
int get_max_idx(struct Stu *arr, int len);
int main()
{
static struct Stu stu[100];
int i,N,max,maxi;
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%s %s %d %d %d", stu[i].a, stu[i].name,&stu[i].grade1,&stu[i].grade2,&stu[i].grade3);
stu[i].sum=stu[i].grade1+stu[i].grade2+stu[i].grade3;
}
#if 1
maxi = get_max_idx(stu, N);
#else
max=stu[0].sum;
for(i=1;i<N;i++){
if(max<stu[i].sum){
maxi=i;
max=stu[i].sum;
}
}
#endif
printf("%s %s %d",stu[maxi].name,stu[maxi].a,stu[maxi].sum);
return 0;
}
int get_max_idx(struct Stu *arr, int len)
{
int i;
int max_i = 0;
for (i = 1; i < len; i++)
if (arr[i].sum > arr[max_i].sum)
max_i = i;
return max_i;
}
参考一下吧;获取总成绩最大的算法你的是没问题的,我自己写了一个函数,比你的少用一个max变量;
去掉scanf中的'\n',另外,a,name前面的&也一并去掉;因为数组名本身就是地址;
scanf("%s %s %d %d %d", stu[i].a, stu[i].name,&stu[i].grade1,&stu[i].grade2,&stu[i].grade3);