解题思路:


    只关注了大概要掌握的

            输入与输出的例子告诉 输入是整型,输出也是

            输入 第一行次数

                      之后每行要有两处字符 三处整型

            输出 第一行 各科的平均成绩按输入的次序输出

                        二   每名学生总成绩最高的相关信息和各科分数

注意事项:

先说好,不喜勿喷;

这一道题简单,但也足让我折腾了近一小时,愣是只对了前边的一半。从只输出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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论