解题思路:阅读题目,我们可以发现,本题分为两个任务:

一、计算三科分别的平均成绩。

二、输出成绩最高的学生的信息。

先来本题所需的主要知识点:结构体

结构体的用处是定义一个“数据类型”。每个数据类型内包括各类型的多个数据。

定义结构体的基本写法

struct 结构类型名 
{ 
    数据类型 成员名 1; 
    数据类型 成员名 2; 
    ...... 
    数据类型 成员名 n; 
};

若要定义数组,可以在分号之前直接写上变量名和数量。

接下来,解决第一个任务。

每个任务分为三个部分。

第一部分:定义需要的变量

计算平均数,当然要计算总和,因为有三个成绩,所以需要定义三个总和。

因为要除以数量,最好用double类型。

double sum_a=0,sum_b=0,sum_c=0;

然后是循环中的部分

把每个总和加上对应的成绩。

sum_a+=h[i].sco_a;
sum_b+=h[i].sco_b;
sum_c+=h[i].sco_c;

最后是输出

cout<<sum_a/n<<' '<<sum_b/n<<' '<<sum_c/n<<endl;

很好,接下来是第二个任务。

第一部分

需要一个max_stu记录成绩最好学生学号和一个max_score比较最高的分数。

第二部分

若该学生的总分大于max_score,那么他就是目前分数最高的学生。

h[i].score=h[i].sco_a+h[i].sco_b+h[i].sco_c;
        if(h[i].score>max_score)
        {
            max_score=h[i].score;
            max_stu=i;
        }

第三部分,输出这个选定的学生的信息。

cout<<h[max_stu].id<<' '<<h[max_stu].name<<' '<<h[max_stu].sco_a<<' '<<h[max_stu].sco_b<<' '<<h[max_stu].sco_c<<endl;

参考代码:

#include <iostream>

using namespace std;
struct student
{
    char id,name[100];
    double sco_a,sco_b,sco_c,score;
}h[1000];
int main()
{
    int n,max_stu;
    double sum_a=0,sum_b=0,sum_c=0,max_score=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>h[i].id>>h[i].name>>h[i].sco_a>>h[i].sco_b>>h[i].sco_c;
        sum_a+=h[i].sco_a;
        sum_b+=h[i].sco_b;
        sum_c+=h[i].sco_c;
        h[i].score=h[i].sco_a+h[i].sco_b+h[i].sco_c;
        if(h[i].score>max_score)
        {
            max_score=h[i].score;
            max_stu=i;
        }
    }
    cout<<sum_a/n<<' '<<sum_b/n<<' '<<sum_c/n<<endl;
    cout<<h[max_stu].id<<' '<<h[max_stu].name<<' '<<h[max_stu].sco_a<<' '<<h[max_stu].sco_b<<' '<<h[max_stu].sco_c<<endl;
    return 0;
}


点赞(163)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论