学生成绩简单统计-结构体的应用-浙大第三周作业

1(10分)学生成绩简单统计。

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

no      name    score1  score2  score3  average
1       K.Weng  5       5       5       5
2       T.Dixon 4       3       2       3
3       V.Chu   3       4       5       4
4       L.Tson  4       3       4       3.66667
5       L.Lee   3       4       3       3.33333
6       I.Young 4       2       5       3.66667
7       K.Hiro  4       2       1       2.33333
8       G.Ping  4       4       4       4
9       H.Gu    2       3       4       3
10      J.Jon   5       4       3       4
        average 3.8     3.4     3.6
        min     2       2       1
        max     5       5       5


因为排版的缘故,你看到的表格也许不够整齐,输出时在所有的输出项之间加\t就可以了。输出格式不是评判的内容。

程序本身并不复杂,只是要求采用结构来表达每个学生的数据,并具有以下代码片段(你的代码中必须含有并使用以下部分):

  1. typedef struct {
  2.     char name[20];
  3.     int score[3];
  4. } Student;
  5.  
  6. //    输入一个学生的数据
  7. Student* student_input(Student *pStudent);
  8. //    输出一个学生的数据,包括平均成绩
  9. void student_print(const Student *pStudent);
  10. //    计算一个学生的平均成绩
  11. double student_average(const Student *pStudent);    
  12. //    获得学生的一个成绩
  13. int student_get_score(const Student *pStudent, int index);

代码如下

    #include <stdio.h>        
    typedef struct {
            char name[20];
            int score[3];
        } Student;
          
        // 输入一个学生的数据
        Student* student_input(Student *pStudent);
        // 输出一个学生的数据,包括平均成绩
        void student_print(const Student *pStudent);
        // 计算一个学生的平均成绩
        double student_average(const Student *pStudent);    
        //获得学生的一个成绩,index为课程编号为0,1,2
        int student_get_score(const Student *pStudent, int index);
        //获取所有学生某一门课程的平均分,n为学生人数,index为课程编号为0,1,2
        double students_average(const Student sts[],int n,int index);
        // 获取所有学生某一门课程的最低分,n为学生人数,index为课程编号为0,1,2
        int students_min(const Student sts[],int n,int index);
        // 获取所有学生某一门课程的最高分,n为学生人数,index为课程编号为0,1,2
        int students_max(const Student sts[],int n,int index);
        const int N=10;//总人数
    int main(){
     
    Student sts[N];
    printf("请输入十条数据,每条数据包括学生姓名(不超过20字符)、第一门课程分数(整数)、第二门学生分数、第三门学生分数,用空格隔开,共输入十次,每条数据用回车隔开\n");
    for(int i=0;i<N;i++){//读入十条数据
    student_input(&sts[i]);
    }
    printf("no\tname\tscore1\tscore2\tscore3\taverage\n");
    for(int i=0;i<N;i++){
    printf("%d\t",i+1);//输出序号
    student_print(&sts[i]);
    printf("\n");
    }
    //输出单科平均成绩
     
    printf("\taverage\t%g\t%g\t%g\n",students_average(sts,N,0),students_average(sts,N,1),students_average(sts,N,2));
    //输出单科最低成绩
    printf("\tmin\t%d\t%d\t%d\n",students_min(sts,N,0),students_min(sts,N,1),students_min(sts,N,2));
    //输出单科最高成绩
    printf("\tmax\t%d\t%d\t%d\n",students_max(sts,N,0),students_max(sts,N,1),students_max(sts,N,2));
     
     
    return 0;
    }
     
    //输入一个学生的数据
    Student* student_input(Student *pStudent){
    scanf("%s %d %d %d",pStudent->name,&pStudent->score[0],&pStudent->score[1],&pStudent->score[2]);
    return pStudent;
    }
     
    //输出一个学生的数据,包括平均成绩
    void student_print(const Student *pStudent){
     
    printf("%s\t%d\t%d\t%d\t%g",pStudent->name,pStudent->score[0],pStudent->score[1],pStudent->score[2],student_average(pStudent));
     
     }
     
    // 计算一个学生的平均成绩
    double student_average(const Student *pStudent){
    double sum=0.0;
    for(int i=0;i<3;i++){
    sum+=pStudent->score[i];
    }
    return sum/3;
    }
     
     //获得学生的一个成绩,i取0,1,2,输入i出错返回-1
    int student_get_score(const Student *pStudent, int index){
    int tmp=-1;
    if(index>2||index<0)
    ;//不做任何运算
    else
    tmp=pStudent->score[index];
    return tmp;
    }
     
    //获取所有学生某一门课程的平均分,n为学生人数,index为课程编号为0,1,2
    double students_average(const Student sts[],int n,int index){
    double sum=0.0;
    for(int i=0;i<n;i++){
    sum+=student_get_score(&sts[i],index);
    }
    return sum/n;
    }
     // 获取所有学生某一门课程的最低分,n为学生人数,index为课程编号为0,1,2
    int students_min(const Student sts[],int n,int index){
    int min=student_get_score(&sts[0],index);
    for(int i=0;i<n;i++){
    if(min>student_get_score(&sts[i],index))
    min=student_get_score(&sts[i],index);
    }
     
    return min;
    }
      // 获取所有学生某一门课程的最高分,n为学生人数,index为课程编号为0,1,2
    int students_max(const Student sts[],int n,int index){
    int max=student_get_score(&sts[0],index);
    for(int i=0;i<n;i++){
    if(max<student_get_score(&sts[i],index))
    max=student_get_score(&sts[i],index);
    }
     
    return max;
    }

运行结果

转载请注明出处




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值