c结构体的初使用(学生成绩简单统计)

学生成绩简单统计。
写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。

#include <stdio.h>
typedef struct
{
    char name[20];
    int score[3];
} Student;

//    输入一个学生的数据
Student* student_input(Student *pStudent);
//    输出一个学生的数据,包括平均成绩
void student_print(int no,const Student *pStudent);
//    计算一个学生的平均成绩
double student_average(const Student *pStudent);
//    获得学生的一个成绩
int student_get_score(const Student *pStudent, int index);
//    获取单门成绩的平均分
double subject_average(const Student* pstus[],int len,int index);
//    获取单门成绩的最低分
int subject_min(const Student* pstus[],int len,int index);
//    获取单门成绩的最高分
int subject_max(const Student* pstus[],int len,int index);
/*
写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),
以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,
对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),
最后输出每门课的平均成绩(浮点表示)和最低最高成绩。
*/
int main(void)
{
    const int size = 3;
    Student stus[size];
    Student* pstus[size];
    for(int i=0; i<size; i++)
    {
        pstus[i] = &stus[i];
    }
    printf("%p\n",pstus[0]);// 0029feec


    for(int i=0; i<size; i++)
    {
        student_input(pstus[i]);
    }
    // no      name    score1  score2  score3  average
    printf("\t%s\t%s\t%s\t%s\t%s\t%s\n",
           "no",
           "name",
           "score1",
           "score2",
           "score3",
           "average"
          );
    for(int i=0; i<size; i++)
    {
        student_print(i,pstus[i]);
    }
    /*
    average 3.8     3.4     3.6
        min     2       2       1
        max     5       5       5
    */
    printf("\t\t%s\t%.2f\t%.2f\t%.2f\n",
           "average",
           subject_average(pstus,size,1),
           subject_average(pstus,size,2),
           subject_average(pstus,size,3)
          );
    printf("\t\t%s\t%d\t%d\t%d\n",
           "min",
           subject_min(pstus,size,1),
           subject_min(pstus,size,2),
           subject_min(pstus,size,3)
          );
    printf("\t\t%s\t%d\t%d\t%d\n",
           "max",
           subject_max(pstus,size,1),
           subject_max(pstus,size,2),
           subject_max(pstus,size,3)
          );
    return 0;
}

//    输入一个学生的数据
Student* student_input(Student *pStudent)
{
    //gets(pStudent->name);
    scanf("%s",pStudent->name);
    scanf("%i",&(pStudent->score[0]));
    scanf("%i",&(pStudent->score[1]));
    scanf("%i",&(pStudent->score[2]));
    return pStudent;
}
//    输出一个学生的数据,包括平均成绩
void student_print(int no,const Student *pStudent)
{
    // 4       L.Tson  4       3       4       3.66667

    printf("\t%d\t%s\t%d\t%d\t%d\t%.2f\n",
           no,
           pStudent->name,
           student_get_score(pStudent,1),
           student_get_score(pStudent,2),
           student_get_score(pStudent,3),
           student_average(pStudent)
          );
}

//    计算一个学生的平均成绩
double student_average(const Student *pStudent)
{
    int a = pStudent->score[0];
    int b = pStudent->score[1];
    int c = pStudent->score[2];
    double avg = 1.0/3*(a+b+c);
    return avg;
}
//    获得学生的一个成绩
int student_get_score(const Student *pStudent, int index)
{
    return pStudent->score[index-1];
}
//    获取单门成绩的平均分
double subject_average(const Student* pstus[],int len,int index)
{
    double avg = 0;
    int total = 0;
    for(int i=0; i<len; i++)
    {
        total+=pstus[i]->score[index-1];
        // printf("total = %d\n",total);
    }
    avg = 1.0*total/len;
    return avg;
}
//    获取单门成绩的最低分
int subject_min(const Student* pstus[],int len,int index)
{
    int min = pstus[0]->score[index-1];
    for(int i=0; i<len; i++)
    {
        int cur = pstus[i]->score[index-1];
        if(min>cur)
        {
            min = cur;
        }

    }
    return min;
}
//    获取单门成绩的最高分
int subject_max(const Student* pstus[],int len,int index)
{
    int max = pstus[0]->score[index-1];
    for(int i=0; i<len; i++)
    {
        int cur = pstus[i]->score[index-1];
        if(max<cur)
        {
            max = cur;
        }
    }
    return max;
}

结果展示:

        no      name    score1  score2  score3  average
        0       汪汪    4       4       5       4.33
        1       喵喵    2       3       3       2.67
        2       哔哔    5       5       5       5.00
                average 3.67    4.00    4.33
                min     2       3       3
                max     5       5       5

只弄了三组数据,无爱.....

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值