6-2 学生成绩的统计(代码附详细解析)

题目描述

有N名学生,每个学生的数据包括学号、姓名、数学成绩、语文成绩,从键盘输入N名学生的数据,并计算出每个学生的平均成绩,最后显示最高平均分的学生的信息,包括学号,姓名,两门课的成绩,平均分数(保留小数点后一位)。需要完成两个函数;

函数接口定义:

void InputData(STU *p,int num);
STU *FindMaxIndex(STU *p,int num);

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#define N 5
typedef struct
{
    int id;
    char name[20];
    int math;
    int chinese;
    double aver;
}STU;
void InputData(STU *p,int num);
STU *FindMaxIndex(STU *p,int num);
int main(void)
{
    STU classone[N];
    STU *pmax;
    InputData(classone,N);
    pmax=FindMaxIndex(classone,N);
    printf("maxinfo:%d %s %d %d %.1f\n",pmax->id,pmax->name,pmax->math,pmax->chinese,pmax->aver);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

2 张 78 34
1 李 67 89
4 王 90 67
3 刘 85 95
5 赵 56 89

输出样例:

maxinfo:3 刘 85 95 90.0

参考答案

// 输入学生信息的函数
void InputData(STU *p, int num) {
    // 遍历每个学生
    for (int i = 0; i < num; i++) {
        // 输入:学号、姓名、数学成绩、语文成绩
        // 注意:p[i] 表示第 i 个学生,p 是指针,p[i] 就是结构体
        scanf("%d %s %d %d", &p[i].id, p[i].name, &p[i].math, &p[i].chinese);
        
        // 计算平均分,注意除以 2.0(浮点数),避免整型除法丢失小数
        p[i].aver = (p[i].math + p[i].chinese) / 2.0;
    }
}

// 找到平均分最高的学生,并返回指向该学生的指针
STU *FindMaxIndex(STU *p, int num) {
    int max_index = 0;  // 假设第一个学生是最高分的

    // 从第二个学生开始遍历
    for (int i = 1; i < num; i++) {
        // 如果当前学生的平均分比当前记录的最高分还高
        if (p[i].aver > p[max_index].aver) {
            max_index = i;  // 更新最高分学生的位置
        }
    }

    // 返回指向平均分最高学生的指针
    return &p[max_index];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值