解题思路:
只关注了大概要掌握的
输入与输出的例子告诉 输入是整型,输出也是
输入 第一行次数
之后每行要有两处字符 三处整型
输出 第一行 各科的平均成绩按输入的次序输出
二 每名学生总成绩最高的相关信息和各科分数
注意事项:
先说好,不喜勿喷;
这一道题简单,但也足让我折腾了近一小时,愣是只对了前边的一半。从只输出0到只输对一点再到差一点输出对->只对一半再到全通,哎~
以下有几点注意问题:
1输入的格式要对:
定义类型和输入类型,这也是为什么只有0
scanf("%s%s%d%d",a[j].ID,a[j].name,&a[j].e[0],&a[j].e[1]);
输入时不是还有回车吗,字符接受了回车
例如这样写 scanf("%s%s%d%d",a[j].ID,a[j].name,&a[j].e[0],a[j].e[1]);
修改后是加上 getchar();和空格scanf("%s %s %d%d",a[j].ID,a[j].name,&a[j].e[0],&a[j].e[1]);
但又改了 ||
getchar();
scanf("%s",&a[j].ID);
scanf("%s",&a[j].name);
scanf("%d%d%d",&(a[j].e[0]),&(a[j].e[1]),&(a[j].e[2]));
到了这一步基本上就只剩下了只对一半的情况了,经过再一次的阅读代码发现 max的标记前的判断是错误的,改正后 通过
参考代码:
#include<stdio.h>
#define N 100
typedef struct{
char ID[N*2];
char name[N*2];
int e[4];
}a;
int main(){
int aver[3]={0,0,0};
int i,j,max,z=0;
scanf("%d",&i);
a a[i];
for(j=0;j<i;j++){
getchar();
scanf("%s",&a[j].ID);
scanf("%s",&a[j].name);
scanf("%d%d%d",&(a[j].e[0]),&(a[j].e[1]),&(a[j].e[2]));
a[j].e[3]=a[j].e[0]+a[j].e[1]+a[j].e[2];
for(z=0;z<3;z++)
aver[z]+=a[j].e[z];
}
max=0;
for(j=1;j<i;j++)
if(a[max].e[3]<a[j].e[3])
max=j;
for(j=0;j<3;j++)
printf("%d ",aver[j]/=i);
printf("\n");
printf("%s %s %d %d %d",a[max].ID,a[max].name,a[max].e[0],a[max].e[1],a[max].e[2]);
return 0;`
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复