用平均分排序,最好用冒泡法

已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将个学生的成绩记录排序(成绩最高的学生排在第一行,成绩最低的学生排在最后一行。)

定义二维数组score[5][4],然后输入所学生的成绩。计算行的和,除以4得到平均分

#include <stdio.h>
typedef struct _student
{
    int s[4];
    float avg;
}student;
int main()
{
    student stu[5],temp;
    int i,j;
    for(i=0;i<5;i++)
    {
        stu[i].avg = 0;
        for(j=0;j<4;j++)
        {
            scanf("%d",&stu[i].s[j]);
            stu[i].avg += stu[i].s[j];
        }
        stu[i].avg /= 4;
    }
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
        {
            if(stu[j].avg < stu[j+1].avg)
            {
                temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
            }
        }
    for(i=0;i<5;i++)
    {
        for(j=0;j<4;j++)
            printf("%d ",stu[i].s[j];
        printf("%.1f\n",stu[i].avg);
    }
    return 0;
}


#include<iostream>
using namespace std;
void main()
{
int i,j,sum,t;
int a[5][5]={{78,82,93,74},{91,82,72,76},{67,89,90,65},{77,88,99,89},{78,89,99,76}}; //5*5够用了
printf("\n");
for (i=0;i<5;i++)
{ sum=0;
for(j=0;j<4;j++) //加前4个成绩
sum+=a[i][j];
a[i][4]=sum/4;}//平均值除4!存在下标为4的元素内;
for(int k=0;k<5;k++)// 加了层循环 参看起泡法
for(i=0;i<5-k;i++)
if(a[i][4]<a[i+1][4])//条件移到循环外了
for(j=0;j<5;j++)
{t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;}
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%8d",a[i][j]);
printf("\n");}
}