题目 1051: 结构体之成绩统计2

题目描述

有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)

输入

学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

输出

各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)

样例输入

2
1 blue 90 80 70
b clan 80 70 60

样例输出

85 75 65
1 blue 90 80 70
#include <stdio.h>

struct Information
{
    char num[16];
    char name[32];
    int grade_1;
    int grade_2;
    int grade_3;
};

void input(struct Information *a,int N);
void average_f(struct Information *a,int N);
void maxf(struct Information *a,int N);

int main()
{
    int N;
    scanf("%d",&N);

    struct Information a[N];

    input(a,N);
    average_f(a,N);
    printf("\n");
    maxf(a,N);

    return 0;
}

void input(struct Information *a,int N)//输入成员数据
{
    int i;

    for(i=0;i<N;i++)
    {
        scanf("%s %s %d %d %d",&(a[i].num),&(a[i].name),
               &(a[i].grade_1),&(a[i].grade_2),&(a[i].grade_3));
    }
}

void average_f(struct Information *a,int N)//平均分
{
    int i;
    float average;

    for(i=0,average=0;i<N;i++)
    {
        average+=a[i].grade_1/(float)N;
    }
    printf("%.0f ",average);

    for(i=0,average=0;i<N;i++)
    {
        average+=a[i].grade_2/(float)N;
    }
    printf("%.0f ",average);

    for(i=0,average=0;i<N;i++)
    {
        average+=a[i].grade_3/(float)N;
    }
    printf("%.0f ",average);
}

void maxf(struct Information *a,int N)//最高分
{
    int i,max;

    max=0;

    for(i=1;i<N;i++)
    {
        if((a[max].grade_1+a[max].grade_2+a[max].grade_3)
            <(a[i].grade_1+a[i].grade_2+a[i].grade_3))
        {
            max=i;
        }
    }

    printf("%s %s %d %d %d",a[max].num,a[max].name,
            a[max].grade_1,a[max].grade_2,a[max].grade_3);
}

上一篇:ICPC2021银川C


下一篇:【PAT】乙级 1051 复数乘法 (15 分) c++