解题思路:思路很清晰,先算各科平均分,再通过k标记总分最高的那位同学,再输出这位同学的所有信息。
注意事项:
参考代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct score
{
int China;
int math;
int Eng;
}Score;
typedef struct student
{
char num[5];
char name[10];
Score st;
}Student;
int main()
{ int sum1=0;
int sum2=0;
int sum3=0;
int N;
int k=0;//用于标记总成绩最高的那个人;
scanf("%d",&N);//输入有几个学生
int score[N];
Student b[N];
Student *p;
p=&b[0];
//初始化
for(int j=0;j<N;j++)
{
strcpy(b[j].num,"0");
strcpy(p->name,"0");
p->st.China=0;
p->st.math=0;
p->st.Eng=0;
p++;
}
p=&b[0];//指针复位
//输入一个学生的所有信息
for(int j=0;j<N;j++)
{
scanf("%s ",p->num);
scanf("%s ",p->name);
scanf("%d %d %d",&p->st.China,&p->st.math,&p->st.Eng);
p++;
}
p=&b[0];//指针复位
for(int i=0;i<N;i++)
{
sum1=sum1+p->st.China;
sum2=sum2+p->st.math;
sum3=sum3+p->st.Eng;
p++;
}
p=&b[0];//指针复位
for(int i=0;i<N;i++)//个人总分
{
score[i]=score[i]+p->st.China+p->st.math+p->st.Eng;
p++;
}
p=&b[0];//指针复位
printf("%2.0f %2.0f %2.0f\n",(float)sum1/N,(float)sum2/N,(float)sum3/N);
for(int i=0;i<N-1;i++)
{
if(score[i]<score[i+1])
{
k=i+1;//k用于标记较大的那个
}
}
p=&b[k];//p指向b【k】
printf("%s ",p->num);
printf("%s ",p->name);
printf("%d %d %d",p->st.China,p->st.math,p->st.Eng);
}
0.0分
1 人评分