解题思路:由题意可知,利用结构体分别定义学号,姓名,三科成绩;再分别计算各科成绩的平均分;再计算总分,通过计算总分,得知最高分为哪一个,再输出那一个的各种信息。

注意事项:学号有数字和字母,应该定义为数组。

参考代码:

#include

struct student        //声明结构体各部分信息

{

    char temp[10];     //学号

    char name[20];     //姓名

    int a;             //学科a

    int b;             //学科b

    int c;             //学科c

};

int main()

{

    struct student t[99];//定义结构体

    int n,i;int sum,o,k,p,q;int a[100];

    sum=0;

    scanf("%d",&n); //输入有多少个学生

    for(i=0;i<n;i++)

    {

        scanf("%s %s %d %d %d",&t[i].temp,&t[i].name,&t[i].a,&t[i].b,&t[i].c);

    } //利用循环分别输入各个学生的信息

    for(i=0;i<n;i++)

    {

        sum+=t[i].a;

    }

    o=sum/n;  //计算学科a的平均分

    sum=0;    //令sum重置为0,不然会有叠加,下同。

    for(i=0;i<n;i++)

    {

        sum+=t[i].b;

    }

    p=sum/n;//计算学科b的平均分

    sum=0;

    for(i=0;i<n;i++)

    {

        sum+=t[i].c;

    }

    q=sum/n;//计算学科c的平均分,到这sum重不重置无所谓,下面用不到sum

    for(i=0;i<n;i++)

    {

        a[i]=t[i].a+t[i].b+t[i].c; //令每个学生的总成绩为a数组里的某个元素

    }

    for(i=0;i<n-1;i++)//注意这里是比较n-1次

    {

        if(a[i+1]>a[i])//循环比较每个学生的总成绩

        {

            k=i+1; //得出总成绩最高的那个学生的序号

        }

        else

        {

            k=i;

        }

    }

    printf("%d %d %d\n",o,p,q);//输出平均分,以及最高分学生的学号,姓名,三科成绩

    printf("%s %s %d %d %d",t[k].temp,t[k].name,t[k].a,t[k].b,t[k].c);

    return 0;

}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论