c语言,这两题怎么写

2025-05-20 20:50:07
推荐回答(1个)
回答(1):

  #include


  typedef struct Student

  {

  char sno[10];

  char name[10];

  int grade;

  }Student;


  //n是学生个数

  void findMaxAndMin(Student s[], int n)

  {

  Student min, max;

  int i;

  min = max = s[0];

  for (i = 0;i < n;i++) {

  if (s[i].grade < min.grade)

  min = s[i];

  if (s[i].grade > max.grade)

  max = s[i];

  }

  printf("成绩最高的学生:\n学号:%s\n姓名:%s\n成绩:%d\n\n", max.sno, max.name, max.grade);

  printf("成绩最低的学生:\n学号:%s\n姓名:%s\n成绩:%d\n", min.sno, min.name, min.grade);

  }


  float avgGrade(Student s[], int n)

  {

  int sum = 0, i;

  for (i = 0;i < n;i++) {

  sum += s[i].grade;

  }

  return (float)(sum / n);

  }


  void sortStudent(Student s[], int n)

  {

  int i, j;

  for (int i = 0; i < n; i++) {

  Student max = s[i];

  Student temp;

  int index = i;

  for (int j = i + 1;j < n;j++) {

  if (s[j].grade > max.grade) {

  max = s[j];

  index = j;

  }

  }


  temp = s[i];

  s[i] = max;

  s[index] = temp;

  }

  }


  void printStudent(Student s[], int n)

  {

  int i;

  printf("\n\n学号\t姓名\t成绩\n");

  for (i = 0;i < n;i++) {

  printf("%s\t%s\t%d\n", s[i].sno, s[i].name, s[i].grade);

  }

  }

  void main()

  {

  Student s[5];

  int i, n = 5;

  for (i = 0;i < 5;i++) {

  printf("请输入第%d个学生学号:", i + 1);

  scanf("%s", s[i].sno);

  printf("姓名:");

  scanf("%s", s[i].name);

  printf("成绩:");

  scanf("%d", &s[i].grade);

  }

  findMaxAndMin(s, n);

  printf("\n\n平均成绩:%.1f\n", avgGrade(s, n));

  sortStudent(s, n);

  printStudent(s, n);

  getchar();

  getchar();

  }