解题思路:思路很清晰,先算各科平均分,再通过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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复