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

    xiaoxiao2021-03-25  25

    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就可以了。输出格式不是评判的内容。

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

    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);    //    获得学生的一个成绩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; } 运行结果

    转载请注明出处

    转载请注明原文地址: https://ju.6miu.com/read-156013.html

    最新回复(0)