结构体定义、地址传参和最大最小

Lab 3-1 结构体定义、地址传参和最大最小
学生期末成绩的信息包括Name和 Chinese, Math, English, Physics, Chemistry五个科目的成绩。试定义一个结构体管理学生成绩,打印输出所有学生中总成绩的最高分和最低分,以及各单科成绩的最高分和最低分,要求如下:
1.在main函数中定义(自定义类型)数组,要求只能使用一个数组;
2.通过传地址方式调用函数,从键盘输入学生信息或随机产生信息;
3.修改课件上三种方法对应的minMax函数,以传值方式传入科目信息,使之能够正确计算各个单科成绩的最低和最高成绩;
4.输出格式, 其中蓝色部分作为可选输出学生姓名:
Chinese: max: 98 Zhangsan min: 63 Wangwu
Math: max: 100 Lisi min: 65 Dalin
English: max: 99 Liuda min: 90 Fengda
physics: max: 99 Liuda min: 90 Liuda
Chemistry: max: 99 Liuda min: 90 Liuda
Total: max: 99 Liuda min: 90 Liuda

#include <stdio.h>
typedef struct _student
{
      char name[20];
      int score[5];
}student;
int createStu(student *stu)
{
    printf("请输入学生人数:");
        int n;
       scanf("%d",&n);
      for(int i=0;i<n;i++)
      {
          printf("请输入第%d个学生的姓名,语文、数学、英语、物理和化学成绩:\n",i+1);
            scanf("%s%d%d%d%d%d",stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);

      }
      return n;
}
void minMax(student *stu,int n,int scoreIdx,int *min,int *minIdx,int *max,int *maxIdx)
{
      if(scoreIdx == -1)
      {
              for(int i=0;i<n;i++)
              {
                    int total  = stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4];
                    if(i==0)
                    {
                          *min = *max = total;
                          *minIdx = *maxIdx = 0;
                    }
                    else
                    {
                          if(*min > total)
                          {
                                  *min =  total;
                                  *minIdx = i;
                          }
                          if(*max < total)
                          {
                                  *max =  total;
                                  *maxIdx = i;
                          }
                    }
              }
      }
      else
      {
              for(int i=0;i<n;i++)
              {
                    if(i==0)
                    {
                          *min = *max = stu[i].score[scoreIdx];
                          *minIdx = *maxIdx = 0;
                    }
                    else
                    {
                          if(*min > stu[i].score[scoreIdx])
                          {
                                  *min =  stu[i].score[scoreIdx];
                                  *minIdx = i;
                          }
                          if(*max < stu[i].score[scoreIdx])
                          {
                                  *max =  stu[i].score[scoreIdx];
                                  *maxIdx = i;
                          }
                    }
              }
      }
}
int main()
{
      char * s[5] = {"Chinese", "Math", "English", "Physics", "Chemistry"};
      student  stu[100];
      int n = createStu(stu);
      int min,max,minIdx,maxIdx;
      for(int i=0;i<5;i++)
      {
            minMax(stu,n,i,&min,&minIdx,&max,&maxIdx);
            printf("%s: max: %d %s min: %d %s\n",s[i],max,stu[maxIdx].name,min,stu[minIdx].name);
      }
      minMax(stu,n,-1,&min,&minIdx,&max,&maxIdx);
      printf("Total: max: %d %s min: %d %s\n",max,stu[maxIdx].name,min,stu[minIdx].name);
      return 0;
}