#C语言程序设计,5个学生3门成绩的平均成绩降序排列

有5个学生,每个学生有3门课的成绩,从键盘输入数据(包括学号、姓名、3门课成绩)或初始化,计算出每个学生的平均成绩,并按平均成绩高低顺序输出学生信息;
设5名学生的学号、姓名和3门课成绩如下:
99101 Wang 89,98,67.5
99103 Li 60,80,90
99106 Fan 75.5,91.5,99
99110 Ling 100,50,62.5
99113 Yuan 58,68,7l

定义数据结构,以及学生数组,然后逐个输入数据,同时统计总分,最后除以3就是平均分,然后冒泡排序

//有5个学生,每个学生有3门课的成绩,从键盘输入数据(包括学号、姓名、3门课成绩)或初始化,计算出每个学生的平均成绩,并按平均成绩高低顺序输出学生信息;
#include <stdio.h>
typedef struct _student
{
    int xh;
    char name[20];
    float score[3];
    float avg;
}student;
int main()
{
    student  s[5],t;
    int i,j;
    for(i=0;i<5;i++)
    {
      scanf("%d%s",&s[i].xh,s[i].name);
      s[i].avg = 0;
      for(j=0;j<3;j++)
      {
          scanf("%f",&s[i].score[j]);
          s[i].avg += s[i].score[j];
      }
      s[i].avg/=3;
    }
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
        {
            if(s[j].avg < s[j+1].avg)
            {
                t = s[j];
                s[j] = s[j+1];
                s[j+1] = t;
            }
        }
    for(i=0;i<5;i++)
        printf("%d\t%s\t%f\t%f\t%f\n",s[i].xh,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);
    return 0;
}

数据从键盘录入方式,如下:

#include <stdio.h>
struct student 
{
    int id;
    char name[20];
    float score[3];
    float ave;
};
//从键盘录入5个学生的成绩
void input(struct student stu[])
{
    int i;
    for (i=0;i<5;i++)
    {
        printf("请输入学生%d的学号、姓名、3门课成绩:",i+1);
        scanf("%d %s %f %f %f",&stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        stu[i].ave = (stu[i].score[0] + stu[i].score[1]+stu[i].score[2])/3.0;
    }
}
void sort(struct student stu[],int n)
{
    int i,j;
    struct student tmp;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if (stu[j].ave < stu[j+1].ave)
            {
                tmp = stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=tmp;
            }
        }
    }
}
int main()
{
    int i;
    struct student stu[5];
    input(stu);
    sort(stu,5);
    printf("排序后:\n");
    for (i=0;i<5;i++)
    {
        printf("%d %s %.1f %.1f %.1f %.2f\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);
    }
    return 0;
}



#include<stdio.h>
 
#define N 5   //定义输入学生的个数
 
struct student //定义学生结构体
{
 
 char num[6] ;
 
 char name[8] ;
 
 int score[3] ;
 
 float avr; 
 
}stu[N]; 
 
void main() 
 
{
 
 int i,j,max,maxi,sum; 
 
 float average; 
 
 for(i=0;i<N;i++) 
 
 {
 
  printf("请输入学生成绩 %d:\n",i+1); //输入每个学生的数据
 
  printf("第:%d",i+1); 
 
  scanf("%s",stu[i].num); 
 
  printf("name:"); 
 
  scanf("%s",stu[i].name); 
 
  for(j=0;j<3;j++) 
 
  {
 
   printf("score %d:",j+1); 
 
   scanf("%d", &stu[i].score[j]); 
 
  } 
 
 } 
 
 average=0; 
 
 max=0; 
 
 maxi=0; 
 
 for(i=0;i<3;i++) //求平均数
 
 {
 
  sum=0; 
 
  for(j=0;j<3;j++) 
 
  sum+=stu[i].score[j]; 
 
  stu[i].avr=sum/3.0; 
 
  average+=stu[i].avr; 
 
  if(sum>max) 
 
  {
 
   max=sum; 
 
   maxi=i; 
 
  } 
 
 } 
 
 average/=N; 
 
 printf("  NO.     name    score1   score2    score3   average\n"); 
 
  for(i=0;i<N;i++) //输出每个学生的信息
 
  {
 
   printf("%5s%8s",stu[i].num, stu[i].name); 
 
   for(j=0;j<3;j++) 
 
    printf("%9d",stu[i].score[j]); 
 
   printf("%8.2f\n",stu[i].avr); 
 
  } 
 
 printf("平均分=%7.2f\n",average); 
 
  printf("最高成绩是:%s,score total:%d.",stu[maxi].name,max); 
 
}