6-7 学生成绩的统计(结构体) pta (含注释)

6-7 学生成绩的统计

有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)
{
    int i;
    for (i=0;i<num;i++)
    {
        scanf ("%d %s %d %d",&p[i].id,p[i].name,&p[i].math,&p[i].chinese);
        p[i].aver=(p[i].math+p[i].chinese)*1.0/2;   //计算平均分
    }
}



STU *FindMaxIndex(STU *p,int num)   //注意返回类型为指针
{
    int i;
    STU *max=&p[0];       //定义指针便于return,我不知道为什么,如果直接定义结构体最后返回其地址的话是错的
    for (i=0;i<num;i++)
    {
        if (p[i].aver>max->aver) max=&p[i];  //max为指针,所以这里为'->'符号
                                             //也可以这样写(*max).aver,但注意要加上这个括号
    }
    return max;
}

 

另外有没有大佬可以帮忙解释一下, 第二个函数中,为什么,如果直接定义结构体最后返回其地址的话是错

第二个函数错误代码示范:

//注意,这是错误示范//
STU *FindMaxIndex(STU *p,int num)   
{
    int i;
    STU max=p[0];       
    for (i=0;i<num;i++)
    {
        if (p[i].aver>max.aver) max=p[i]; 
    }
    return &max;  //返回地址
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值