已知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");}
}