课堂补忽

#include<stdio.h>
#define N 5
struct Student
{
    int num;
    char name[20];
    float score[3]; 
    float aver;
    }stu[5];
void aver(struct Student stu[]);
int main()
{
    void input( struct Student stu[]);
    struct Student max (struct Student stu[]);
    void print(struct Student stu);
    struct Student *p=stu;
    input(p);
    print(max(p));
    aver(stu);
    return 0;
    
}
void input (struct Student stu[])
{
    int i;
    printf("请输出各学生的信息:学号、姓名、三门课成绩:\n");
    for (i=0;i<N;i++)
    { 
    scanf("%d%s%f%f%f",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/5;
    }
}
         struct Student max(struct Student stu[])
         { int i,m=0;
         for(i=0;i<N;i++)
         if(stu[i].aver>stu[m].aver)
         m=i;
         return stu[m];       
         }
         void print(struct Student stud)
         {  printf("\n成绩最高的学生是:\n");
         printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);
         
         }
void aver(struct Student stu[])
{
    float sum1,sum2,sum3;
    int i;
    for(i=0;i<3;i++)
    {
        sum1+=stu[i].score[0];
    }
    for(i=0;i<3;i++)
    {
        sum2+=stu[i].score[1];
    }
    for(i=0;i<3;i++)
    {
        sum3+=stu[i].score[2];
    }
    printf("第一门成绩的平均成绩%5.1f\n第二门成绩的平均成绩%5.1f\n第三门成绩的平均成绩%5.1f\n",sum1/3,sum2/3,sum3/3);
} 
请输出各学生的信息:学号、姓名、三门课成绩:
11 wang 77 78 98
22 li 98 78 99
33 hua 98 89 78
44 hul 90 99 78
55 ri 78 89 77

成绩最高的学生是:
学号:22
姓名:li
三门课成绩: 98.0, 78.0, 99.0平均成绩: 55.00
第一门成绩的平均成绩 91.0
第二门成绩的平均成绩 81.7
第三门成绩的平均成绩 91.7

--------------------------------
Process exited after 45.28 seconds with return value 0
请按任意键继续. . .

总结:课堂上在函数那里想利用多个for循环来减少行数,但是不停出错,最终还是用回了书上例题的方式最终成功运行。

 

posted @ 2017-04-11 22:01  境界  阅读(101)  评论(0编辑  收藏  举报