《算法笔记》-习题 100000572 E

题目描述

有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。

输入

共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出

第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。

实现

#include <cstdio>
#include<cstring>

struct student{
    int id;
    char name[20];
    int score[3];
    double average;
}stu[10];
void input(){
    for(int i=0;i<10;i++){
        scanf("%d%s%d%d%d",&stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        for(int j=0;j<3;j++){
            while(stu[i].score[j]>100||stu[i].score[j]<0){
                printf("请重新输入第%d门的成绩,0-100的整数:",j+1);
                scanf("%d",&stu[i].score[j]);
            }
        }
        stu[i].average=((double)stu[i].score[0]+(double)stu[i].score[1]+(double)stu[i].score[2])/3.0;
    }
}
void average_func(double average[]){
    double sum[3]={0};
    for(int i=0;i<3;i++){
        for(int j=0;j<10;j++){
            sum[i]+=stu[j].score[i];
        }
    }
    for(int i=0;i<3;i++){
        average[i]=sum[i]/10;
    }
}
void print(double average[]){
    double max_average=stu[0].average;
    int n=0;
    for(int i=0;i<3;i++){
        printf("%.2f ",average[i]);
    }
    for(int i=1;i<10;i++){
        if(stu[i].average>=max_average){
            max_average=stu[i].average;
            n=i;
        }
    }
    printf("\n%d %s %d %d %d\n",stu[n].id,stu[n].name,stu[n].score[0],stu[n].score[1],stu[n].score[2]);
}
int main(){
    double average[3];
    input();
    average_func(average);
    print(average);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值